选择不同的行如果没有一行返回
问题描述:
这是一种很难的标题,但鉴于这一说法:选择不同的行如果没有一行返回
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或其他一些我不知道的关键字?
我知道这当然可以通过在没有行的情况下运行第二条语句来完成,但这不是我想要做的。
答
假定查询应永远只能返回一行
select discount from people_discount
where id = ? and (pgroup = ? or pgroup = 0)
order by pgroup desc
limit 1;
答
如果limit
似乎“不纯”,你可以使用其他的技巧。
虽然它假定折扣从不为负,这可能是更便携:
select abs(max(case when proup <> 0 then discount else -discount end))
from people_discount
where id = ? and pgroup in (?, 0)
group by id
并不是每一个平台都有一个顶/极限/提取选项。有些人反对非基于集合的查询。我只是简单地向那些人提供一种黑客攻击,或者至少是以不同方式思考问题的练习。
的想法是只是假设不能有一个负的折扣和使用数字刻度的端部暂时“存储”用于PGROUP 0 MAX()
回退折扣由利于正值完成排序和限制的等效当两者都存在时。 ABS()
恢复结果的标志。
耶稣。我怎么能想到这一点。也许是时候睡觉了。编辑:我的头条还有一个INNER JOIN。什么。 – nickdnk