我在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)
首先,然后是其余的结果。
非常感谢你的帮助。
答案 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