MySQL IN子句中包含逗号

时间:2012-04-18 02:35:01

标签: php mysql

我对MySQL IN Clause有一个问题,我不知道如何启动代码。

原始

$merchant_separated = implode(",", $array);
$sql = mysql_query("SELECT * FROM assigned_id WHERE id NOT IN ($merchant_separated) AND viewable = 'True'");

我现在在数据库表中的内容是以下代码:

$sql = mysql_query("SELECT * FROM product_purchased");
whil($r=mysql_fetch_array($sql))
$r['merchantid_imploded'] ='9,6,2,3,5,4,1,7,8'
$r['productnumber'] = 'Fjduensd'
$r['Title'] = 'Animation Csr'
$r['Product Name'] = 'Inwards Development'

我想要做的就是像下面的代码一样获取。它无法正常工作,因为在查询中有一个字段merchantid_imploded 9,6,2,3,5,4,1,7,8,无法使用逗号获取clientid。

$clientid = 2
$sql = mysql_query("SELECT * FROM product_purchased WHERE merchantid_imploded IN ($clientid) ");

我想要做的只是通过购买此产品来获取此商家

请告知

1 个答案:

答案 0 :(得分:2)

嗯,你对merchantid_imploded的设计会给你带来很多麻烦。您应该将这些数字存储在一个单独的表中,每行一个,以及产品编号。查找术语“数据库规范化”以了解有关此内容的更多信息。在为此设计提交更多编程工作之前,解决此问题的最佳时间是 now 。 (同时,请考虑使用参数化查询来保护您的代码免受SQL注入攻击。)

也就是说,MySQL(SQL数据库中唯一的)提供了许多功能,让您可以按照自己的意愿行事。一种可能性是FIND_IN_SET:

WHERE FIND_IN_SET($clientid, merchantid_imploded) > 0

此外,普通的旧IN应该在MySQL中工作,假设您将参数放在正确的位置:

WHERE $clientid IN merchantid_imploded