У меня есть определенная ситуация, которая требует определенного набора результатов из запроса MySQL, давайте сначала посмотрим на текущий запрос, а затем зададим мой вопрос:
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
Как видите, в основном мне нужно выбрать строку даты потоков из таблицы 'ниток', в дополнение к строке даты второго сообщения каждой темы, и это все при условиях, которые вы видите в WHERE CLAUSE. Поскольку в каждой теме много сообщений, и мне нужен только один результат для каждой темы, для этой цели я использовал GROUP BY CLAUSE.
Этот запрос вернет только одну строку даты публикации с соответствующей уникальной веткой.
Мои вопросы:
- Как ограничить количество возвращаемых тем
каждый форум !? Предположим, мне нужно только 5
темы - как максимум - быть
возвращается за каждый форум, объявленный в
ГДЕ ОГОВОРКА 'forum.forumid
IN (1,2,3) ', как это может быть
достигается.
- Есть ли рекомендации для
оптимизировать этот запрос (конечно,
после решения первого пункта)?
Примечания:
- Я предпочитаю не использовать подзапросы, но
если это единственное доступное решение
Я приму это. Двойных запросов нет
рекомендуемые. Я уверен, что есть умный
решение для этой ситуации.
- Я использую MySQL 4.1+, но если вы знаете,
ответ для другого двигателя, просто
доля.
Заранее признателен за консультацию:)