我有一个充满交易的数据库,以及一个网站,如果该交易是特色交易,则该网站将仅显示其中一项交易,但是我正在努力寻找正确的逻辑...... 网站上显示的交易必须 A。在有效日期范围内 b.是最近添加到数据库的交易
通过使用以下查询,我能够完成此任务:
"SELECT * FROM deals WHERE datestart < now() AND dateend > now() ORDER BY deals.deal_id DESC"
太棒了。然而......在极少数情况下,会同时添加一大堆交易,因此我需要某种覆盖来指定应该“推荐”哪一个。
我添加了一个 bool 值 [featured] 并测试了以下查询:
"SELECT * FROM deals WHERE datestart < now() AND dateend > now() ORDER BY deals.featured DESC"
它有效,但现在我需要指定特色交易,否则特色交易将被随机选择?而我只想将其作为覆盖。
所以我需要以某种方式组合以上两个脚本。
有什么想法吗?
谢谢大家。
最佳答案
将 bool 比较添加到 WHERE 子句并将结果数量限制为 1。按 deal_id 排序时,这将始终返回相同的结果。
SELECT *
FROM deals
WHERE datestart < now() AND dateend > now() AND deals.featured IS TRUE
ORDER BY deals.deal_id DESC
LIMIT 1
编辑:
这是一个替代方案,因此您不必向 WHERE 子句添加更多内容。
SELECT *
FROM deals
WHERE datestart < now() AND dateend > now()
ORDER BY deals.featured DESC, deals.deal_id DESC
LIMIT 1
ORDER 子句的顺序很重要,如果 deal_id 是唯一的(正如我所认为的那样),如果它们以相反的方式排序,则不会使用 featured bool 值。
关于MySQL查询逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11627662/