PDO多个查询理解问题

时间:2013-05-15 07:50:18

标签: php mysql pdo subquery

好的家伙我很难理解如何进行某项查询。

这就是我想要实现的目标:

我正在尝试从查询结果中输出DISTINCT品牌。因此,当用户搜索“SHOE”实例时,我可以输出我数据库中的所有鞋子,并且可以选择用户可以选择某个品牌来过滤结果。我已经可以从MATCH AGAINST查询中输出我需要的所有数据,我只是无法弄清楚怎么做 一个可以用PDO查询我的第一个查询的查询

这就是我所拥有的:

<?php
require_once 'login.php';
$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$usersearch=strip_tags($_POST['searchquery']);
$query=$db->prepare("SELECT * FROM products WHERE MATCH(description) AGAINST (? IN BOOLEAN MODE) OR MATCH(brand) AGAINST(? IN BOOLEAN MODE);SELECT DISTINCT brand FROM products");
$query->execute(array('+%'.$usersearch.'%','+%'.$usersearch.'%'));
$result=$query->fetchALL(PDO::FETCH_ASSOC);
?>

我的问题在于"SELECT DISTINCT brand FROM products"

这是执行多个查询的正确方法吗?这会选择分号左侧的每个品牌FROM THE FIRST QUERY还是仅对数据库中的每一行执行查询?

任何帮助将不胜感激。

我有点停滞不前。

2 个答案:

答案 0 :(得分:1)

不,您无法使用PDO在一个字符串中准备和执行多个查询。

您可以使用mysqli::multi_query,但不做准备。但它对多选择无用。

您可以使用union,但所选字段的数量必须相同。例如

SELECT brand FROM products 
    WHERE 
        MATCH(description) AGAINST (? IN BOOLEAN MODE) 
        OR MATCH(brand) AGAINST(? IN BOOLEAN MODE) 
UNION SELECT DISTINCT brand FROM products

P.S。或者只使用两个分开的查询:^)

答案 1 :(得分:-1)

我发布此答案以防其他人遇到此问题。我使用一个空数组来存储每个品牌,如果有任何匹配的值,则使用continue来传递它。

<?php
    $emptyarray=array();
    foreach($result as $row) {
        $individualbrand=$row['brand'];
        if(in_array($individualbrand,$emptyarray))
            continue;
        $emptyarray[]=$individualbrand;
        for($i=0;$i<10;++$i)
            echo '<a href="#">'.$emptyarray[$i].'</a><br />';}
            ?>

这将从数据库结果中输出UNIQUE品牌名称。创建空数组,在检查重复项时填充。然后for循环遍历每个数组值。 (我使用了10,因为我不认为搜索会产生超过10个品牌名称。)希望这可以帮助将来的某个人。