SQL:如果没有帖子从另一个类别中选择一个查询,则按类别选择一个帖子

时间:2011-11-19 13:26:04

标签: php sql wordpress

目的: 我每隔半小时查询一次数据库,找不到要发布的帖子,每次按不同类别查询,如果此类别中没有帖子,请切换到下一个类别。 由SQL 完成的if检查
伪代码

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-pseudo-code?

2 个答案:

答案 0 :(得分:0)

尝试使用CASE..WHEN ... ELSE语句..请参阅链接:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

答案 1 :(得分:0)

看起来像这样:

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_IDcat_ID行。

  • cat_ID排序 - 您似乎首先需要最小的post_date。按cat_ID降序进行二级排序,因此最后一篇文章排在第一位。

  • 如果cat_ID 7中没有,{{1}} 8将是第一个等等。