php - 如何从数组中获取与至少一个值匹配的所有行?

标签 php mysql sql

我的数组中的值如下。

$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/

相关文章:

php - 查询不同的数据库

php - 选择除查询中两个表中匹配的行之外的所有行

php - 将数据库中的数据显示给特定用户(使用角色?)

c# - ASP.NET MVC5 不会创建 MySQL 数据库,除非在初始化程序处中断

mysql - 基于内部选择的计数

php - UTF-8贯穿始终

MySQL 获取出生日期/生日的下一个实例

MySql - 如何在选择和分组依据中使用表达式

读取第一行所有列的SQL命令

sql - 根据特定条件选择在 FROM 子句中使用的表