php - 当双方都有多个值时如何在sql中使用IN语句

标签 php mysql

我有一个问题。我想知道当双方都有多个值时如何使用 IN 语句(在查询中) - 我正在写一个查询:

SELECT name FROM math_Details WHERE cric_ids in (1,2,3,4,8);

在这个查询问题中,cric_ids 列中也有多个值通过 (,comma) 分隔; 像 (5,9,1,10,2)

请帮帮我好吗?

最佳答案

可以使用 MySQL 的 FIND_IN_SET()重复函数:

SELECT name
FROM   math_Details
WHERE  FIND_IN_SET(1, cric_ids) OR FIND_IN_SET(2, cric_ids)
    OR FIND_IN_SET(3, cric_ids) OR FIND_IN_SET(4, cric_ids)
    OR FIND_IN_SET(8, cric_ids)

这样的语句可以在 PHP 中动态构建。例如,使用 prepared statementsPDO :

$set = [1,2,3,4,8];
$sql = 'SELECT name FROM math_Details WHERE FALSE'
     . str_repeat(' OR FIND_IN_SET(?, cric_ids)', count($set));

$qry = $dbh->prepare($sql);
$qry->execute($set)

但是,正如其他人所说,这表明数据库设计不佳。你应该考虑 normalising你的数据结构,这样你就有了一个表,而不是 cric_ids 字段,而是将 math_Details 中的记录与每个 cric 相关联。

关于php - 当双方都有多个值时如何在sql中使用IN语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10932048/

相关文章:

javascript - 上传时防止空闲状态(iOS 上的网络应用程序)

php - PhpMyAdmin 中的文件大小达到 34KB 限制

php - docusign php api 登录示例不起作用

mysql - 基于 Windows 的 MySQL 分析工具

javascript - ajax从数据库请求接收数据不起作用

php - 在发送请求之前,PHP是否针对WSDL验证请求?

javascript - php脚本执行超时

sql - customer.pk_name加入transaction.fk_name与customer.pk_id [串行]加入transaction.fk_id [整数]

MySQL:从 SELECT 语句到 INSERT 语句

java c3p0 : how can i configure autoreconnect=true?