MYSQL通配符搜索 - 排序结果问题

时间:2017-12-11 16:02:14

标签: mysql

我在mysql数据库中有一张化学品表。我想执行像 -

这样的通配符搜索
SELECT * FROM chemical WHERE chemical like '%toluene%'

SQL查询结果是 -

Bromotoluene
Chlorotoluene (Benzyl chloride)
Cymene (Isopropyltoluene)
Dinitrotoluene (DNT)
Isopropyl toluene (Cymene)
Octachlorotoluene
Toluene (Toluol)*
Toluene di-isocyanide (TDI)
Trinitrotoluene (TNT)

在字符串的第一个字符(在这种情况下,'甲苯')之前的完全匹配的结果是否可以在任何其他结果之前列出?例如 - 我想显示 -

Toluene (Toluol)
Toluene di-isocyanide (TDI) 

首先,然后是其余的结果。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

我会将查询拆分为两部分:

select * FROM chemical where chemical like 'toluene%'
union
select * FROM chemical where chemical like '%toluene%'

为了将更相关的结果放在首位。 union将自动排除重复的结果。

答案 1 :(得分:1)

CREATE TABLE info (val varchar(50));

INSERT INTO info (val) VALUES ('Bromotoluene');
INSERT INTO info (val) VALUES ('Chlorotoluene (Benzyl chloride)');
INSERT INTO info (val) VALUES ('Cymene (Isopropyltoluene)');
INSERT INTO info (val) VALUES ('Dinitrotoluene (DNT)');
INSERT INTO info (val) VALUES ('Isopropyl toluene (Cymene)');
INSERT INTO info (val) VALUES ('Octachlorotoluene');
INSERT INTO info (val) VALUES ('Toluene (Toluol)*');
INSERT INTO info (val) VALUES ('Toluene di-isocyanide (TDI)');
INSERT INTO info (val) VALUES ('Trinitrotoluene (TNT)');

SELECT *
FROM info
WHERE val LIKE '%toluene%'
ORDER BY CASE WHEN val LIKE 'toluene%' THEN 0 ELSE 1 END, val

https://docs.microsoft.com/en-us/sql/connect/php/how-to-perform-parameterized-queries