好的,通常我知道你会做这样的事情就是你知道数组值:
SELECT * WHERE id IN (1,2,3)
但是......我不知道数组值,我只知道我想在'存储'数组中找到的值:
SELECT * WHERE 3 IN (ids) // Where ids is stored as 1,2,3
哪个不起作用。还有另一种方法吗?
答案 0 :(得分:67)
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) . "') "
}