回答

收藏

如何确保记录始终存在mysql给定的结果集中在顶部?

技术问答 技术问答 106 人阅读 | 0 人回复 | 2023-09-13

我有一个搜索查询,根据输入参数生成结果集,可以根据不同的参数对结果进行排序(ASC / DESC):价格、持续时间等(分页到位,最多记录10条)1 a' [! @( ?5 B" F
如果我现在有一个要求的话id我希望相应的记录在给定结果集中的顶部保持粘性。0 c  E6 a7 M  G
假设我们有这样一个包表:, }! _4 n9 X+ t* ]
Package - id - name - mPrice - vPrice - duration// Searching pkg based on Price (in DESC order) where name = ThailandsqlQuery = "SELECT p.id,p.name,p.mPrice,p.vPrice FROM package p WHERE p.name = LOWER('Thailand') ORDER BY (p.mPrice   p.vPrice) DESC LIMIT 10"假设完整的结果集是20个ID现在我需要返回1到20的记录ID 14的记录总是在顶部。我提出了以下查询,但不起作用:5 F9 k' w" I  c3 f7 ?, G4 ^
sqlQuery = "SELECT p.id,p.name,p.mPrice,p.vPrice FROM package p WHERE p.name = LOWER('Thailand') or p.id = 14ORDER BY CASE WHEN p.id=14 then 0 else (p.mPrice   p.vPrice) end DESC LIMIT 10"我猜测它为什么不起作用:在order by结果集按降序排序,然后在10个记录处被截断。id = 14的记录可能不属于截断集。对吗 ?
) Z- }+ ?( K5 v如何获得ID = 14的记录停留在顶部?3 Z/ L% H1 I4 F/ Q; D" @1 x
                                                               
& ^6 `9 j" e0 u) ?4 M- M    解决方案:                                                                ' E7 M3 d8 G* Z/ E1 K# e6 c2 z, ^
                                                                ORDER BY (p.id=14) DESC,(p.mPrice=p.vPrice) DESCp.id=14``1如果条件为true,0则返回,否则,降序排列将所需带到顶部。
9 d7 k  |! U2 x: j  e1 E% u, Z数字从比较中返回MySQL您可以使用标准功能SQL编写:
- c% k4 C0 b/ L4 V! R' m" m# ~( s" L0 ZORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,        CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END我发现它比阅读更容易UNION,而且可能会更好。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则