php - SQL 选择 col1 等于逗号分隔字符串中的值之一的所有行
问题描述
从逗号分隔的字符串中选择多行匹配值。
example 1: A0001,A0002
example 2: A0001,A0003,A0005,A0006
example 3: A0007,A0008,A0009,A0010,A0011,A0012.
Table: Data
col1 col2 col3
--------------------
A0001 A B
A0002 C D
A0003 E F
A0004 G H
A0005 I J
A0006 K L
A0007 M N
A0008 O P
A0009 Q R
A0010 S T
A0011 U V
A0012 W X
A0013 Y Z
使用或
$sqlData = $this->con->prepare("SELECT col1, col2, col3
FROM data
WHERE col1=A0001 or col2=A0001");
$sqlData->execute();
我不能使用 OR,因为逗号分隔字符串中的值的数量会有所不同。
使用数组
$comaSeperatedString = "A0007,A0008,A0009,A0010,A0011,A0012";
col1_arr = explode(",", $comaSeperatedString);
foreach (col1_arr as dataItem) {
$sqlData = $this->con->prepare("SELECT col1, col2, col3
FROM data
WHERE col1=dataItem");
$sqlData->execute();
echo col1;
echo col2;
echo col3;
}
我可以将逗号分隔的字符串推送到一个数组中,然后使用 foreach 循环遍历数组,为每个实例运行查询。然而,这似乎草率和浪费。
我想选择 col1 等于逗号分隔字符串中的值之一的所有行。
这可以在一个简单的 SQL 语句中完成吗?
解决方案
您可以使用FIND_IN_SET()
which 返回项目在逗号分隔列表中的位置,或者0
如果未找到:
$comaSeperatedString = "A0007,A0008,A0009,A0010,A0011,A0012";
$query = $this->con->prepare('SELECT col1, col2, col3 FROM data WHERE FIND_IN_SET(col1, :values)');
$query->bindParam(':values', $comaSeperatedString);
$query->execute();
推荐阅读
- javascript - 仅接受使用 materialize 列出的选项的自动完成
- azure-cosmosdb - Cosmos db 用户 ID/电子邮件作为分区键
- java - Generating a new java class by writing java program in another java class
- python - 我创建了许多具有相同名称的精灵,当对所有精灵进行任何操作时,它只会影响最后创建的精灵
- docker - Docker 在构建期间无法访问任何 Internet URL
- node.js - passport.js deserializeUser 如何解密散列的会话数据?
- css - WordPress Gutenberg 在编辑器中处理 CSS
- mysql - 按 a、b 分组 VS 按 b、a 分组
- reactjs - 当列表中的项目使用 React 更改顺序时制作动画?
- python - Selenium 不下载选项传递给 Chrome 驱动程序