Запрос с помощью group_concat возвращает только одну строку
Это запрос, который должен получить информацию о пользователе, информацию о своем проекте и группу_concat всех путей изображения, к которым связан такой проект. Чтобы добавить к этому, я получаю информацию только от людей, которых пользователь следит.
Это, однако, только для повторной передачи одной строки.
SELECT users.first_name, users.last_name, users.user_id, projects.project_id, projects.project_name, projects.project_time, group_concat(images.image_path)
FROM users, projects, images
WHERE users.user_id = projects.user_id
AND users.user_id IN (SELECT follow_user_2 FROM following WHERE follow_user_1 = 1)
ORDER BY projects.project_id DESC
СРАВНИТЬ: Следующий запрос РАБОТЫ в том смысле, что в цикле он предоставляет всю информацию о пользователе и информацию о проектах, связанных с таким пользователем.
SELECT users.first_name, users.last_name, users.user_id, projects.project_id, projects.project_name, projects.project_time
FROM users, projects
WHERE users.user_id = projects.user_id
AND users.user_id IN (SELECT follow_user_2 FROM following WHERE follow_user_1 = 1)
ORDER BY projects.project_id DESC
Когда я пытаюсь использовать group_concat, он возвращает мне строку один, и я не понимаю, почему.
Может кто-нибудь мне помочь? Спасибо. Если бы мой вопрос был недостаточно ясным, я уточню.
Если это поможет, здесь SQL FIDDLE.
http://www.sqlfiddle.com/#!2/867f6/2
Мне пришлось значительно сократить мою схему. Попробуйте оба запроса выше, чтобы увидеть проблему.
Ответы
Ответ 1
Когда я пытаюсь использовать group_concat, он просто возвращает мне одну строку, и я не понимаю, почему.
Потому что вы не использовали предложение GROUP BY
в своем запросе. При использовании агрегатных функций, таких как GROUP_CONCAT
, вам нужно сообщить базе данных о столбце, в котором вы хотите объединить данные.
В настоящее время ваш запрос группирует все записи и дает 1 запись на выходе.
Если вы добавите GROUP BY users.userid
в запрос, то записи будут сгруппированы по уникальному идентификатору пользователя. Я обновил вашу скрипку, и теперь она дает 2 записи: http://www.sqlfiddle.com/#!2/867f6/18
Обратите внимание: в стандартных SQL-запросах столбцы, перечисленные в предложении GROUP BY, должны соответствовать столбцу в предложении SELECT (кроме агрегатных функций).
Ответ 2
Просто используйте предложение group by
в your_query
SELECT users.first_name, users.last_name,
users.user_id, projects.project_id,
projects.project_name, projects.project_time,
group_concat(images.image_path)
FROM users, projects, images
WHERE users.user_id = projects.user_id
AND users.user_id IN (SELECT follow_user_2 FROM following
WHERE follow_user_1 = 1)
group by users.first_name
ORDER BY projects.project_id DESC;
fiddle
Ответ 3
Это потому, что вы не использовали group by
в запросе. Таким образом, СУБД будет group_concat
всех строк в одной строке. Потому что есть group by project_id
например.