2016-11-28 4 views
-3

Я сделал веб-приложение, протестированное на локальном хосте отлично. Поместите его на мой сервер и на GROUP BY в запросе он выводит пустой пульт с 500 internal server error в консоли.Группа по причинам 500 ошибка межсетевого сервера

$sth = $db->prepare('SELECT users.username FROM users INNER JOIN questions ON users.question_id=questions.id WHERE questions.question_list_pass = "'.$ww.'" GROUP BY users.username ORDER BY users.username'); 
    $sth->execute(); 
    $usernames = $sth->fetchAll(PDO::FETCH_ASSOC); 

    $sth = $db->prepare('SELECT questions.id, questions.question_name FROM 
questions INNER JOIN users ON users.question_id=questions.id WHERE questions.question_list_pass = "'.$ww.'" GROUP BY questions.question_name ORDER BY questions.question_name'); 
    $sth->execute(); 
    $question_names = $sth->fetchAll(PDO::FETCH_ASSOC); 

Первый запрос идентичен второму, за исключением получения данных из разных таблиц. Когда я запускаю скрипт, он выводит 500 internal server error, а когда я удаляюGROUP BY questions.question_name из второго запроса (но все равно сохраняю порядок), скрипт работает, НО он выводит все несколько раз (потому что порядок не работает должным образом)

Любые идеи, как это возможно? Я позволяю разным людям смотреть на него, но никто не знает, что неправильно.

С наилучшими пожеланиями,

+0

Зачем вам нужно объединение в первую очередь? Кажется, что вам не нужно что-либо от пользователей во втором запросе, если только это не ограничивает вопросы, связанные с пользователями ..., которые существовал бы более эффективно. Зачем вам нужна группа, если у вас нет агрегации? GROUP BY действительно требуется, только если у вас есть агрегация. Если у вас есть повторяющиеся вопросы и вы хотите отличные записи, используйте DISTINCT. 'SELECT DISTINCT questions.id, questions.question_name FROM вопросов INNER JOIN users on users.question_id = questions.id WHERE questions.question_list_pass =" '. $ Ww.' "ORDER BY questions.question_name' – xQbert

+0

500 внутренняя ошибка причина' $ sth = false'. Таким образом, у вас есть фатальная ошибка, когда вы выполняете 'execute();'. Пожалуйста, комментируйте exec и введите все и после строки запроса 'echo 'SELECT users.username FROM users INNER JOIN questions ON users.question_id = questions.id WHERE questions.question_list_pass ="'. $ Ww. '"Пользователи GROUP BY .username ORDER BY users.username''; – Xenofexs

+0

Если вы проверите свои журналы ошибок, вы получите довольно хорошее объяснение обычно. –

ответ

0

Почему вам нужна группа по, если у вас нет агрегации? GROUP BY действительно нужен, только если у вас есть агрегация.

Зачем вам нужно объединение в первую очередь? Кажется, что соединение становится причиной дублирования записей, поэтому, устраняя его, мы избавляемся от необходимости различать. Кажется, что вам не нужно что-либо от пользователей во втором запросе, если только это не ограничивает вопросы, связанные с пользователями ..., которые существовало бы более эффективно.

Если у вас есть повторяющиеся вопросы/результаты и вы хотите отличные записи, используйте DISTINCT.

Это использование существует, хотя коррелированный подзапрос, похоже, будет более эффективным, исключая соединение, которое вызывает очевидное дублирование. Вы могли бы просто добавить отдельный, но это просто кажется ... чище ... Теперь, если у вас есть дополнительные критерии предложения, специфичные для пользователя, или же нужно отображать информацию о пользователе в результатах; то четкий, скорее всего, будет иметь больше смысла.

SELECT Q.id, Q.question_name 
FROM questions Q 
WHERE Q.question_list_pass = "'.$ww.'" 
    and exists (SELECT 1 
       FROM users U 
       WHERE U.Question_ID = Q.Questions_ID) 
ORDER BY Q.question_name` 
Смежные вопросы