SQLite 仅按第一个 WHERE 匹配排序
SQLite sort only by first WHERE match
我有一个包含 3 列的 table:name
、keywords
和 weight
,以及这些数据
name
keywords
weight
Kevin
Any, Any, Any, Any
1
Hugh
Kevin, Any, Any, Any
1
现在我想select从这个tablewhere
名称或关键字匹配一个查询,并希望按名称和权重排序,但排序应该只针对where匹配名称而不是关键字,例如使用此查询:
SELECT * FROM users WHERE name LIKE '%Kevin%' OR keyword LIKE '%Kevin%' ORDER BY name, weight DESC;
此查询将 return 同时 Kevin
和 Hugh
但 Hugu
将在第一个然后 Kevin
,我需要的是 Kevin
首先被 returned,所以如果名称匹配查询,则按 name
和 weight
排序,如果不是,但 keyword
匹配查询,然后执行仅按 weight
排序。
所以这里的问题是,我如何排序取决于名称是否匹配查询
我想你希望匹配项先命名:
SELECT *
FROM users
WHERE name LIKE '%Kevin%' OR keyword LIKE '%Kevin%'
ORDER BY (CASE WHEN name LIKE '%Kevin%' THEN 1 ELSE 2 END),
weight DESC;
我有一个包含 3 列的 table:name
、keywords
和 weight
,以及这些数据
name | keywords | weight |
---|---|---|
Kevin | Any, Any, Any, Any | 1 |
Hugh | Kevin, Any, Any, Any | 1 |
现在我想select从这个tablewhere
名称或关键字匹配一个查询,并希望按名称和权重排序,但排序应该只针对where匹配名称而不是关键字,例如使用此查询:
SELECT * FROM users WHERE name LIKE '%Kevin%' OR keyword LIKE '%Kevin%' ORDER BY name, weight DESC;
此查询将 return 同时 Kevin
和 Hugh
但 Hugu
将在第一个然后 Kevin
,我需要的是 Kevin
首先被 returned,所以如果名称匹配查询,则按 name
和 weight
排序,如果不是,但 keyword
匹配查询,然后执行仅按 weight
排序。
所以这里的问题是,我如何排序取决于名称是否匹配查询
我想你希望匹配项先命名:
SELECT *
FROM users
WHERE name LIKE '%Kevin%' OR keyword LIKE '%Kevin%'
ORDER BY (CASE WHEN name LIKE '%Kevin%' THEN 1 ELSE 2 END),
weight DESC;