这很难成为标题,但鉴于此声明:
SELECT DISCOUNT FROM people_discounts WHERE ID = ? AND PGROUP = ?
假设我输入ID 5和PGROUP 2.表中不存在此行(fetch
在PHP和mysqli的情况下返回false)。在这种情况下,我希望在声明中显示的行是:
SELECT DISCOUNT FROM people_discounts WHERE ID = ? AND PGROUP = 0
ID仍为5,但PGROUP“回落”为0,我们假设始终存在。
这可能与某种IF,CASE或其他一些我不知道的关键词有关吗?
我知道这当然可以通过在没有行的情况下运行第二个语句来完成,但这不是我想要做的。
答案 0 :(得分:2)
假设查询应该只返回一行
select discount from people_discount
where id = ? and (pgroup = ? or pgroup = 0)
order by pgroup desc
limit 1;
答案 1 :(得分:1)
limit
似乎" impure"你可以使用其他技巧。
虽然假设折扣永远不会消极,但这可能更具便携性:
select abs(max(case when proup <> 0 then discount else -discount end))
from people_discount
where id = ? and pgroup in (?, 0)
group by id
并非每个平台都有top / limit / fetch选项。有些人反对非基于集合的查询。我只是在考虑那些人,或者至少作为一种以不同方式思考问题的练习。
这个想法只是假设不存在负面折扣并且使用数字刻度的那一端暂时&#34;存储&#34; pgroup 0的后备折扣。MAX()
通过在两者都存在时支持正值来完成等效的排序和限制。 ABS()
恢复结果的符号。