我正在使用PHP,我已经制作了这段代码: `
$categories = array('casual','dinner', 'kids');
$numberOfCategories = count($categories);
for ($i=0; $i < $numberOfCategories; $i++) {
$req = $pdo->query('
SELECT ProductID
, ProductCategoryID
FROM products
WHERE ProductCategoryID LIKE "%'.$categories[$i].'%"
');
while (${"relatedProduct" . $i} = $req->fetch()) {
var_dump(${"relatedProduct" . $i});
}
}
`
如果你仔细观察,你会注意到某些产品会自我重复(这是正常的)。
我现在要做的是组合存储在变量${"relatedProduct" . $i}
中的每个循环的结果并过滤该结果(组合每个循环的结果后的结果)以避免基于列{重复产品{1}}
请帮我解决这个问题。
答案 0 :(得分:2)
避免将字符串直接包含在SQL中(SQL注入攻击的潜在危险)。改为使用参数化的预准备语句。
DISTINCT
将为您提供唯一的行(Prod.ID / Cat.ID组合)。您可以将搜索针与|
合并,并将其作为RLIKE
的正则表达式进行比较。结果是每个LIKE %needle%
得到的结果总和。
$req = $pdo->prepare('
SELECT DISTINCT
`ProductID`,
`ProductCategoryID`
FROM
`products`
WHERE
`ProductCategoryID` RLIKE :pattern
');
$categories = array('casual','dinner', 'kids');
$cats = implode("|", $categories);
$req->bindParam(':pattern', $cats, PDO::PARAM_STR);
$req->execute();
答案 1 :(得分:0)
$pdo->query(' SELECT GROUP_CONCAT(ProductCategoryID) as ProductCategoryID
FROM products
WHERE ProductCategoryID LIKE "%'.$categories[$i].'%"
');
使用此U&#l;将获得包含匹配条件的所有productCategoryID的单行。
现在您可以使用array_unique()函数来获取唯一的ProductCategoryID