我的数组中的值如下。
$findList = array(1,2,3,6);
我在数据库中有一张如下表。
id sets
1 1
2 1,2
3 1,2,4
4 1,2,6
5 3,8,9
6 7,8,9
7 5,8,9
现在,我想查找具有数组 findList 的任何值的所有行。
因此结果集应该有前五行。
我可以通过分解数组并用每个元素编写 OR 查询来做到这一点。还有其他办法吗?
最佳答案
靠着Lad2025的sqlfiddle还有这个Clever Answer来自帕维尔
架构
CREATE TABLE tab(
id INTEGER NOT NULL PRIMARY KEY
,sets VARCHAR(6) NOT NULL
);
INSERT INTO tab(id,sets) VALUES (1,'1');
INSERT INTO tab(id,sets) VALUES (2,'1,2');
INSERT INTO tab(id,sets) VALUES (3,'1,2,4');
INSERT INTO tab(id,sets) VALUES (4,'1,2,6');
INSERT INTO tab(id,sets) VALUES (5,'3,8,9');
INSERT INTO tab(id,sets) VALUES (6,'7,8,9');
INSERT INTO tab(id,sets) VALUES (7,'5,8,9');
查询
-- 1,2,3,6 ... seek this
select * from tab
WHERE CONCAT(",", `sets`, ",") REGEXP ",(1|2|3|6),";
+----+-------+
| id | sets |
+----+-------+
| 1 | 1 |
| 2 | 1,2 |
| 3 | 1,2,4 |
| 4 | 1,2,6 |
| 5 | 3,8,9 |
+----+-------+
更好的是,请参阅上面关于数据标准化问题的评论。如果这样做,您可能会选择索引的最佳使用方式。
关于php - 如何从数组中获取与至少一个值匹配的所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292896/