Php 查询以分号分隔的值列,其中
我有以下问题:Php 查询以分号分隔的值列,其中,php,mysql,denormalization,Php,Mysql,Denormalization,我有以下问题: SELECT a.* FROM programm a WHERE a.traffic IN ('DE;AT;CH;') ORDER BY a.programmid asc LIMIT 0,10 <pre> programmid | traffic ------------+------ 1 | DE;AT;CH; 2 | AT; 3
SELECT a.*
FROM programm a
WHERE a.traffic IN ('DE;AT;CH;')
ORDER
BY a.programmid asc
LIMIT 0,10
<pre>
programmid | traffic
------------+------
1 | DE;AT;CH;
2 | AT;
3 | CH;
4 | PL;BG;DE;
5 | AM;BG;DE;
</pre>
这真是太棒了
但如果我只想询问一个国家,这是不可能的:
SELECT a.*
FROM programm a
WHERE a.traffic IN ('DE;')
ORDER
BY a.programmid asc
LIMIT 0,10
数据库结构:
所有程序ID应列在DE、BG通信量中的位置。
这将是编程MID 1,4,5变体1:
WHERE LOCATE(';DE;', CONCAT( ';', traffic, ';'))
备选案文2:
还有更多的变体。但它们都不能使用索引并导致全表扫描
规范化您的数据
注:如果您需要按多个国家进行搜索,则可以使用单独的表达式按每个国家进行搜索。解决方案不是构建黑客代码以适应糟糕的表设计,而是对数据库进行规范化,以便编写干净的代码。
WHERE FIND_IN_SET('DE', REPLACE(traffic, ';', ','))
WHERE LOCATE(';DE;', CONCAT( ';', traffic, ';'))