gpt4 book ai didi

mysql - 使用匹配条件对 SQL 中的行提取进行排序的任何方法

转载 作者:行者123 更新时间:2023-11-29 06:04:27 26 4
gpt4 key购买 nike

我对 SQL 有点陌生。我想做的是按匹配条件的降序对行进行排序。当我说匹配条件时,我的意思是那些与我的 SQL 查询具有更多匹配列的行应该排在第一位。喜欢

SELECT a.*, 
f.*
FROM a
INNER JOIN f as f
ON f.fid = a.aid
WHERE ( a.icid = 25290
AND a.pt = 2 )
AND ( f.st LIKE '%Outpatient%'
OR f.st LIKE '%Service201%' )

现在我的行​​的顺序应该是,如果它匹配所有它应该出现在顶部,然后第二个应该是匹配所有列但 F.ST 的那个,然后依此类推。

例子

我在表名 Test 中有 5 列列的名称是

id, 名字, fname, 城市, 国家

我的查询

SELECT * 
FROM TEST
WHERE name LIKE "%John%"
OR fname LIKE "%Mike%"
OR city IN ("Abu Dhabi, New York, Manchester")
OR country IN ("USA, UAE, UK")

假设我有 10 行针对此查询。我想要的是匹配所有的行应该在结果集的顶部喜欢关注

名字,名字,城市,国家

John, Mike, New York, USA -> 匹配所有四个字段

John, Mike, Delhi, UK -> 匹配三个字段

John, Khan, Lahore, USA -> 匹配两个字段

John, Khan, Lahore, PK -> 匹配一个字段

John Mike, Khan, Lahore, PK -> 匹配一个字段

最佳答案

MySQL 将在数字上下文中将 bool 表达式视为整数。这使您的问题易于回答:

SELECT a.*, f.* 
FROM a INNER JOIN
f f
ON f.fid = a.aid
WHERE a.icid = 25290 AND
a.pt = 2 AND
( f.st LIKE '%Outpatient%' OR f.st LIKE '%Service201%' )
ORDER BY ( (f.st LIKE '%Outpatient%') + (f.st LIKE '%Service201%') ) DESC;

注意:如果愿意,您可以将相同的表达式放在 SELECT 中:

SELECT . . .,
( (f.st LIKE '%Outpatient%') + (f.st LIKE '%Service201%')
) as numMatches
. . .

关于mysql - 使用匹配条件对 SQL 中的行提取进行排序的任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com