MySQL - 如何选择值在数组中的行?

时间:2010-10-27 19:56:02

标签: php mysql

好的,通常我知道你会做这样的事情就是你知道数组值:

SELECT * WHERE id IN (1,2,3)

但是......我不知道数组值,我只知道我想在'存储'数组中找到的值:

SELECT * WHERE 3 IN (ids) // Where ids is stored as 1,2,3

哪个不起作用。还有另一种方法吗?

4 个答案:

答案 0 :(得分:67)

使用FIND_IN_SET function

SELECT t.*
  FROM YOUR_TABLE t
 WHERE FIND_IN_SET(3, t.ids) > 0

答案 1 :(得分:17)

当查询到达SQL时,您必须已经扩展了列表。这样做的简单方法是,如果您使用来自某个内部可信数据源的ID,您可以100%确定它们是整数(例如,如果您之前从数据库中选择它们)是这样的:

$sql = 'SELECT * WHERE id IN (' . implode(',', $ids) . ')';

如果你的数据来自用户,你需要确保你只获得整数值,或许最容易这样:

$sql = 'SELECT * WHERE id IN (' . implode(',', array_map('intval', $ids)) . ')';

答案 2 :(得分:5)

如果您使用FIND_IN_SET(a, columnname)功能:

FIND_IN_SET(columnname, a)会产生所有记录中包含“a”的记录,单独或与其他记录

AND

FIND_IN_SET(columnname, a)仅产生仅有“a”的记录,而不是其他记录

因此,如果record1是(a,b,c)而record2是(a)

FIND_IN_SET(a, columnname)仅产生记录2,而Object产生两个记录。

答案 3 :(得分:4)

如果数组元素不是整数,则可以使用如下所示的内容:

$skus  = array('LDRES10','LDRES12','LDRES11');   //sample data

if(!empty($skus)){     
    $sql = "SELECT * FROM `products` WHERE `prodCode` IN ('" . implode("','", $skus) . "') "      
}