SQL: ВЫБЕРИТЕ одно сообщение по категории, если ни одно сообщение не выбрало из другой категории только один запрос - PullRequest
0 голосов
/ 19 ноября 2011

Цель : Каждые полчаса я запрашиваю базу данных, чтобы найти сообщение, которое еще не опубликовано для публикации, каждый раз, когда я запрашиваю по другой категории, если нет сообщений в этой категории, переключайтесь на следующую категорию. Проверка if выполняется SQL псевдокод

SELECT FROM post WHERE post.cat_ID='7' AND post_date > '$last_query_time_cat_ID_7' 
IF NO_POSTS_MATCH SELECT FROM post WHERE post.cat_ID='8' AND post_date>'$last_query_time_cat_ID_8'
...

псевдо объяснение : выберите один пост из одной категории по времени его последнего запроса в этой категории, если ни один новый пост из этой категории не будет выбран из другой категории по времени последнего запроса. Мой вопрос: Есть ли такой SQL для этой работы?Это может быть сделано с помощью php, чтобы проверить, не возвращаются ли сообщения, а затем сделать еще один SQL-запрос. Это может сделать много запросов.Кто-нибудь покажет мне sql-псевдокод этой проблемы?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2011

Может выглядеть так:

SELECT p.post_ID, p.cat_ID, p.post_date
FROM   post p
JOIN   (
    SELECT cat_ID
          ,max(query_time) AS last_query
    FROM   post 
    WHERE  cat_ID >= 7
    GROUP  BY 1
    ORDER  BY 1) l USING (cat_ID)
-- in some RDBMS you need ON l.cat_ID = p.cat_ID in the JOIN clause
WHERE  p.post_date > l.last_query
ORDER  BY p.cat_ID, p.post_date DESC
LIMIT  1;  -- In T-SQL you need to write "SELECT TOP 1" instead

Основные баллы

  • Сначала получите метку времени последнего запроса по категории в подзапросе. Мы заинтересованы только в cat_ID >= 7

  • Присоедините это к базовой таблице и отфильтруйте только строки с более поздним post_date, чем last_query на cat_ID.

  • Сортируйте по cat_ID - вам кажется, что сначала нужно наименьшее cat_ID. Вторичная сортировка по убыванию post_date, поэтому последнее сообщение идет первым.

  • Если их нет в cat_ID 7, cat_ID 8 будет первым и т. Д. Вуаля.

0 голосов
/ 19 ноября 2011

Попробуйте использовать CASE..WHEN ... ELSE Statement .. См. Ссылку: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

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