1

好吧,伙计们,我很难理解如何进行某个查询。

这就是我想要完成的:

我正在尝试从查询结果中输出 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还是仅对数据库中的每一行执行查询?

任何帮助,将不胜感激。

我有点停滞不前。

4

2 回答 2

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

PS 或者只使用两个单独的查询:^)

于 2013-05-15T07:52:15.773 回答
-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 个。)希望这对将来的某人有所帮助。

于 2013-05-15T18:26:28.873 回答