SQL: ограничение количества строк, связанных с каждой объединенной строкой - PullRequest
2 голосов
/ 16 апреля 2010

У меня есть определенная ситуация, которая требует определенного набора результатов из запроса 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.

Этот запрос вернет только одну строку даты публикации с соответствующей уникальной веткой.

Мои вопросы:

  1. Как ограничить количество возвращаемых тем каждый форум !? Предположим, мне нужно только 5 темы - как максимум - быть возвращается за каждый форум, объявленный в ГДЕ ОГОВОРКА 'forum.forumid IN (1,2,3) ', как это может быть достигается.
  2. Есть ли рекомендации для оптимизировать этот запрос (конечно, после решения первого пункта)?

Примечания:

  • Я предпочитаю не использовать подзапросы, но если это единственное доступное решение Я приму это. Двойных запросов нет рекомендуемые. Я уверен, что есть умный решение для этой ситуации.
  • Я использую MySQL 4.1+, но если вы знаете, ответ для другого двигателя, просто доля.

Заранее признателен за консультацию:)

1 Ответ

1 голос
/ 24 апреля 2010

Может быть, это такой вопрос: "ограничить число строк, к которым нужно присоединиться в mysql" или, точнее, его указатель Как выбрать первую / наименьшую / максимальную строку на группу в SQL может помочь.

Все это сводится к подзапросам, хотя я думаю.

...