Я определенную ситуацию, которая требует определенного набора результатов из запроса MySQL, давайте посмотрим на текущий запрос первый & затем задать свой вопрос:SQL: Предельные строки связаны друг присоединился ряд
SELECT
thread.dateline AS tdateline, post.dateline AS pdateline, MIN(post.dateline)
FROM thread AS thread
LEFT JOIN post AS post ON(thread.threadid = post.threadid)
LEFT JOIN forum AS forum ON(thread.forumid = forum.forumid)
WHERE post.postid != thread.firstpostid
AND thread.open = 1
AND thread.visible = 1
AND thread.replycount >= 1
AND post.visible = 1
AND (forum.options & 1)
AND (forum.options & 2)
AND (forum.options & 4)
AND forum.forumid IN(1,2,3)
GROUP BY post.threadid
ORDER BY tdateline DESC, pdateline ASC
Как вы можете видеть, в основном мне нужно выбрать dateline потоков из таблицы «thread», в дополнение к dateline второго поста каждого потока, это все в условиях, которые вы видите в WHERE CLAUSE. Поскольку каждый поток имеет много сообщений, и мне нужен только один результат для потока, для этой цели я использовал GROUP BY CLAUSE.
Этот запрос будет возвращать только одну строку сообщения с его уникальной нитью.
Мои вопросы:
- Как ограничить возвращаемые нитей на каждый форум !? Предположим, мне нужны только 5 потоки - максимум , возвращенный для каждого форума, объявленного в , WHERE CLAUSE 'forum.forumid IN (1,2,3)', как это может быть .
- Есть ли рекомендации для , оптимизирующие этот вопрос (конечно, после решения первой точки)?
Примечания:
- Я предпочитаю не использовать подзапросы, но , если это единственное решение Я принимаю его. Рекомендуется использовать двойной запрос не . Я уверен, что для этой ситуации есть разумное решение .
- Я использую MySQL 4.1+, но если вы знаете ответ для другого движка, просто share.
Оценил совет заранее :)