我有这张表,其中包含以下记录:
CREATE TABLE `t_vias` (
`id` int(11) NOT NULL,
`cpro` varchar(2) NOT NULL,
`cmum` varchar(3) NOT NULL,
`cpos` varchar(5) NOT NULL,
`mun` varchar(75) NOT NULL,
`via` varchar(100) NOT NULL);
INSERT INTO t_vias VALUES
("6021","28","079","28016","MADRID","GOYA, FRANCISCO DE"),
("6022","28","079","28016","MADRID","FRANCISCO GOYA"),
("6896","28","079","28001","MADRID","GOYA, DE"),
("6897","28","079","28001","MADRID","GOYA (DE)"),
("6900","28","079","28001","MADRID","CALLE GOYA"),
("6901","28","079","28001","MADRID","CALLE DE GOYA");
我从 php 变量接收值“CALLE DE GOYA”,并且我在查询中包含变量值:
SELECT * FROM `t_vias` WHERE via ='CALLE DE GOYA';
结果只显示一条记录:
id cpro cmum cpos mun via
6901 28 079 28001 MADRID CALLE DE GOYA
既然来了,就可以了。但如果我想显示所有带有“GOYA”字样的寄存器(删除CALLE、DE等):
SELECT * FROM `t_vias` WHERE via ='%GOYA%';
id cpro cmum cpos mun via
6021 28 079 28016 MADRID GOYA, FRANCISCO DE
6022 28 079 28016 MADRID FRANCISCO GOYA
6896 28 079 28001 MADRID GOYA, DE
6897 28 079 28001 MADRID GOYA (DE)
6900 28 079 28001 MADRID CALLE GOYA
6901 28 079 28001 MADRID CALLE DE GOYA
没关系,用 GOYA 返回所有条目。
问题是如果变量的值是这样的:'DE GOYA'
然后查询:
SELECT * FROM `t_vias` WHERE via LIKE '%DE GOYA%';
id cpro cmum cpos mun via
6901 28 079 28001 MADRID CALLE DE GOYA
仅返回一条记录。如果没有 DE,(DE) 如果包含它,我如何搜索变量值?
我建议去正则表达式
SELECT * FROM `t_vias` WHERE via regexp "GOYA";
SELECT * FROM Test WHERE name LIKE CONCAT('%',REPLACE('DE GOYA', 'DE ', ''), '%');
这个怎么样?您可以将“DE GOYA”替换为“GOYA”或“GOYA DE”。这将从 DE GOYA -> GOYA 中删除 DE 并将其与所有记录匹配(因此它将找到 GOYA、DE GOYA、GOYA DE、DEGOYADE、GOYADE 等。