2017-01-11 5 views
2

У меня есть учетные записи, сообщения и дискуссии.
При получении сообщения я также хочу получить обсуждения, связанные с этим сообщением.
Связь с таблицей - сообщение может иметь ноль или больше обсуждений. Я написал следующий запрос.Это хорошая идея написать запрос несколько раз

SELECT p.*,d._id, d.discussion, d.discussed_by 
FROM posts p, discussions d 
WHERE d.post_id = p._id 

Этот запрос работает, но результат такой, как показано ниже. От _id до account_id из таблицы сообщений. Если у меня будет 100 обсуждений по этому сообщению, результат будет иметь 100 дубликатов данных. Как я могу это преодолеть. Моя идея - получить этот пост в первый раз (первый запрос) и получить все обсуждения этого сообщения (второй запрос). Как насчет этого?

В PHP виде массива Я хочу, чтобы получить результаты в следующем формате
пост (1) обсуждение (1), обсуждение (2), обсуждение (3)
Но теперь мое возвращение запрос в следующий результат.
пост (1) обсуждение (1)
пост (1) обсуждение (2)
пост (1) обсуждение (3)
Я использую PHP и MySQL. Result of the above query

Wanted result, is it possible or not?

ли это возможно или нет?

+2

Для этого необходимо использовать запрос левого соединения –

+1

Сами обсуждения, разумеется, не дублируются. –

+1

@Chetan Panchal Как я могу использовать? Пожалуйста, объясните мне? –

ответ

1

Один из вариантов получения результата, который вы хотите использовать GROUP_CONCAT, в дискуссиях, посвященных одному и тому же идентификатору сообщения. Это приведет к списку разделенных запятыми дискуссий для этого потока. Что-то вроде этого должно работать:

SELECT t1.*, 
     COALESCE(t2.discussion, 'NA') 
FROM posts t1 
LEFT JOIN 
(
    SELECT _id, GROUP_CONCAT(discussion) AS discussion 
    FROM discussions 
    GROUP BY _id 
) t2 
    ON t1.post_id = t2._id 
+0

В результате нет данных из таблицы обсуждений. Мне нужно что-то изменить в вашем запросе? –

+0

Я обновил свой ответ, просто сделаю дополнительное соединение к 'обсуждениям'. Я рекомендую _not_ использовать '. *' Для выбора, а скорее для написания каждого столбца. Это позволит вам обрабатывать nulls более легко. –

+0

Ваш ответ хорошо работает, но результат тот же, что и мой. –

Смежные вопросы