如何根据一列对查询结果进行排序?
How can I sort the result of a query based on the one column?
这是我的查询:
SELECT name, usage_guidance, total_used_num
FROM tags
WHERE
( name LIKE CONCAT('%', ?, '%') OR
usage_guidance LIKE CONCAT(?, '%') ) AND
name NOT IN ($in)
LIMIT 6
现在我想按 name
列对结果进行排序。我的意思是我想把符合 name LIKE CONCAT('%', ?, '%')
条件的匹配结果放在第一位,然后其他结果应该在它们之后。我该怎么做?
您可以将 where
条件添加到 order by
子句:
order by (name like CONCAT('%', ?, '%')) desc,
(usage_guidance LIKE CONCAT(?, '%')) desc
MySQL 将数字上下文中的布尔表达式视为数字,“1”表示真,“0”表示假。因此 desc
排序顺序。
请注意,usage_guidance
的第二个条件并不是回答问题所必需的。
如果我对你的问题理解正确,你希望首先显示 name LIKE %SOMETHING%
匹配的结果。
您可以通过在 IF()
语句 中设置一个额外的 select 字段 来实现这一点,其条件与 WHERE
子句相同name
并按该字段排序:
SELECT name, usage_guidance, total_used_num, name LIKE CONCAT('%', ? , '%') as sort_field
FROM tags
WHERE
( name LIKE CONCAT('%', ?, '%') OR
usage_guidance LIKE CONCAT(?, '%') ) AND
name NOT IN ($in)
ORDER BY sort_field DESC
LIMIT 6
编辑:我刚刚意识到,您根本不需要 IF()
语句
这是我的查询:
SELECT name, usage_guidance, total_used_num
FROM tags
WHERE
( name LIKE CONCAT('%', ?, '%') OR
usage_guidance LIKE CONCAT(?, '%') ) AND
name NOT IN ($in)
LIMIT 6
现在我想按 name
列对结果进行排序。我的意思是我想把符合 name LIKE CONCAT('%', ?, '%')
条件的匹配结果放在第一位,然后其他结果应该在它们之后。我该怎么做?
您可以将 where
条件添加到 order by
子句:
order by (name like CONCAT('%', ?, '%')) desc,
(usage_guidance LIKE CONCAT(?, '%')) desc
MySQL 将数字上下文中的布尔表达式视为数字,“1”表示真,“0”表示假。因此 desc
排序顺序。
请注意,usage_guidance
的第二个条件并不是回答问题所必需的。
如果我对你的问题理解正确,你希望首先显示 name LIKE %SOMETHING%
匹配的结果。
您可以通过在 IF()
语句 中设置一个额外的 select 字段 来实现这一点,其条件与 WHERE
子句相同name
并按该字段排序:
SELECT name, usage_guidance, total_used_num, name LIKE CONCAT('%', ? , '%') as sort_field
FROM tags
WHERE
( name LIKE CONCAT('%', ?, '%') OR
usage_guidance LIKE CONCAT(?, '%') ) AND
name NOT IN ($in)
ORDER BY sort_field DESC
LIMIT 6
编辑:我刚刚意识到,您根本不需要 IF()
语句