Сложный SQL (возможно внешние соединения) - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть 2 таблицы, как определено ниже.

Таблица отзывов
id
user_id
обзор
title
datetime

Таблица PeopleFollows
id
user_id
follow_user_id
datetime

Я хочу выполнить 1 запрос, чтобы получить 10 лучших результатов по дате и времени.Так, например, если у меня есть следующие данные:

Таблица просмотра

1 user1  "This is my review" "title" 2011-01-10  
2 user1 "Another review" "title again" 2011-01-08  

Люди следят за таблицей

1 user2 user1 2011-01-09 

Я хочу получить такие результаты:

Review id=2  
People follows id=1
Review id = 1  

Единственный способ, которым, как мне кажется, я могу это сделать, - это выполнить отдельные запросы по пределу X, а затем объединить их для получения результатов X.

Возможно, мне придется объяснить немного больше.1033 *

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Полное сканирование не требуется, если вы индексируете обе таблицы по дате и времени, а также упорядочиваете каждый запрос по дате и времени перед UNION.

(SELECT "Review", id, datetime FROM Reviews ORDER BY datetime DESC LIMIT 10)
UNION 
(SELECT "People", id, datetime FROM PeopleFollows ORDER BY datetime DESC LIMIT 10)
ORDER BY datetime DESC
LIMIT 10
0 голосов
/ 21 ноября 2011

Вы можете использовать UNION, но запрос не будет оптимальным:

(SELECT "Review", id FROM Reviews)
UNION
(SELECT "People", folowing_user_id FROM PeopleFollows)
ORDER BY datetime DESC
LIMIT 10

Вы не можете использовать правильные индексы в этом запросе, это будет полное сканирование.Поэтому используйте его на свой страх и риск.

Лучшая идея - не пытаться объединять таблицы.Для этого используйте третью кеш-таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...