好的家伙我很难理解如何进行某项查询。
这就是我想要实现的目标:
我正在尝试从查询结果中输出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
还是仅对数据库中的每一行执行查询?
任何帮助将不胜感激。
我有点停滞不前。
答案 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个品牌名称。)希望这可以帮助将来的某个人。