0

我在 PHP 中有这个 SQL SELECT:

SELECT * 
  FROM ads 
 ORDER BY ad_sponsored_date DESC, ad_date DESC

我想显示一个广告列表,它们通常按日期排序,但如果一个是赞助的,那么它会出现在顶部。上面做得很好;但我还需要测试 ad_support_date 是否不大于时间戳,如果是,则仅按第二个 (ad_date) 排序,这可能吗?

像这样的东西,但我不知道正确的语法:

SELECT * 
  FROM ads 
 ORDER BY (ad_sponsored_date DESC IF ad_sponsored_date > $timestamp, ad_date DESC)
4

2 回答 2

1

这捕获了您在 SQL 中的逻辑:

SELECT *
FROM ads
ORDER BY (case when ad_sponsored_date > $timestamp then ad_sponsored_date end) desc,
         ad_date DESC;

但是,我不清楚如何处理 if 的“else”部分。

注意:在 MySQL 中,NULL 值按降序排列放在最后,这就是为什么将赞助广告放在列表顶部的原因。

于 2013-08-09T01:46:01.620 回答
1

尝试

SELECT * 
  FROM ads 
  ORDER BY CASE WHEN ad_sponsored_date > '$timestamp'
                THEN ad_sponsored_date 
                ELSE ad_date END DESC

这是SQLFiddle演示

于 2013-08-09T01:48:09.347 回答