Я пытаюсь составить список дискуссий, связанных с пользователем.
Представьте себе, если вы:
posts
-------------------------------------------------------------------
ID | PID | FID | TITLE | USER
1 | 0 | 1 | Hello World | User 1
2 | 0 | 23 | Endangered Squirrels & How to Cook Them | Eddy
3 | 1 | 1 | Re: Hello World | Eddy
4 | 1 | 1 | Re: Hello World | Clark
5 | 0 | 3 | Any Vacation Suggestions? | Clark
6 | 5 | 3 | Re: Any Vacation Suggestions? | Eddy
7 | 5 | 3 | Re: Any Vacation Suggestions? | Clark
8 | 5 | 3 | Re: Any Vacation Suggestions? | Ellen
Чтобы показать все сообщения Eddy, я использовал запрос для выбора сообщений с идентификаторами родителей DISTINCT (pid) и думал, что он работает. Вскоре я понял, что 0 только рассмотрел DISTINCT один раз, и если он создал новую тему и не ответил, это не было указано, если это не было его первым.
Итак, как мне получить список идентификаторов с DISTINCT pid и pid! = 0 и присоединить его к запросу идентификаторов, которые имеют pid = 0, где пользователь = Eddy
Это первый вопрос, который я когда-либо задавал, поэтому простите меня, если он не идеален.
ОБНОВЛЕНО С ЗАПРОСОМ
Я с тех пор перешел на использование GROUP BY, поэтому я могу получить идентификатор сообщения, но проблема все та же
Меня попросили предоставить мой запрос. Это тот, который я использую, который предоставляет только 1 строку с pid как 0. Я также обновил свой макет таблицы выше, чтобы показать идентификатор форума, в запросе ниже он только тянет темы из списка общедоступных форумов.
SELECT id, pid FROM posts WHERE fid IN (1,2,3) AND author = 'Eddy' GROUP BY pid ORDER BY IF(latest > timestamp, latest, timestamp) DESC LIMIT 1, 5;
спасибо за любую помощь.
Я смог сделать то, что хотел, с простым IF в GROUP BY, это было так просто.
SELECT id, pid
FROM posts
WHERE fid IN (1,2,3)
AND author = 'Eddy'
GROUP BY IF(pid > 0, pid, id)
ORDER BY IF(latest > timestamp, latest, timestamp) DESC
LIMIT 1, 5;