组合多个SQL查询结果

时间:2016-05-10 07:48:26

标签: php mysql sql

我正在使用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});
                    }
                }

`

运行代码后,得到以下结果: Query Results

如果你仔细观察,你会注意到某些产品会自我重复(这是正常的)。

我现在要做的是组合存储在变量${"relatedProduct" . $i}中的每个循环的结果并过滤该结果(组合每个循环的结果后的结果)以避免基于列{重复产品{1}}

请帮我解决这个问题。

2 个答案:

答案 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