从mysql数据库中选择列包含PHP的位置

时间:2012-03-21 12:25:38

标签: php mysql

我有一个数据库,有些列包含CA,GB等内容,但有些列包含多个国家/地区代码,例如

US + GB + CA + AU

我只是想知道当我搜索CA或只是GB时,我会做什么样的查询会返回该行,并且不一定是整个包US + GB + CA + AU

确保这有点令人困惑,基本上我只需要根据搜索CA或只是GB等来返回该行。

由于

3 个答案:

答案 0 :(得分:4)

使用FIND_IN_SET(),但您首先需要将+替换为,,因为它需要逗号分隔的字符串。即使没有 REPLACE(),这不会使用countrycodes列上的任何索引。

SELECT * FROM tbl 
WHERE FIND_IN_SET('AU', REPLACE(countrycodes, '+', ',')) > 0

然而,正确的长期解决方案是更改数据库结构以将这些国家/地区代码规范化为仅包含两列的表 - 国家/地区代码,以及您尝试的表中相关行的ID现在查询。然后,您可以适当地对列进行索引以提高性能(可能会极大地改进它)。

答案 1 :(得分:3)

我建议像甘草酒说的那样将它标准化。

但使用 SELECT ... WHERE countrycode LIKE'%GB%'可行。 http://w3schools.com/sql/sql_like.asp

答案 2 :(得分:2)

这不是一个好的解决方案,但您可以使用LIKE进行查询:

SELECT * FROM `table` WHERE `field` LIKE '%+CA+%' OR `field` LIKE 'CA+%' OR `field` LIKE '%+CA' OR `field` = 'CA'

最后两次检查冷杉和最后的值。