Подтвердить что ты не робот

Запрос с помощью 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 Мне пришлось значительно сократить мою схему. Попробуйте оба запроса выше, чтобы увидеть проблему.

4b9b3361

Ответ 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 например.