目的:
我每隔半小时查询一次数据库,找不到要发布的帖子,每次按不同类别查询,如果此类别中没有帖子,请切换到下一个类别。
由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? p>
答案 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_ID
每cat_ID
行。
按cat_ID
排序 - 您似乎首先需要最小的post_date
。按cat_ID
降序进行二级排序,因此最后一篇文章排在第一位。
如果cat_ID
7中没有,{{1}} 8将是第一个等等。