2010-04-15 2 views
2

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

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

Мои вопросы:

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

Примечания:

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

Оценил совет заранее :)

ответ

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