我正在尝试根据标签搜索照片表。
我将搜索字词拆分为单独的关键字,并在表格中搜索每个关键字,将所有匹配项推送到数组。
$keywords = explode(' ', $keywords);
$photos = array();
// loop through each keyword
foreach($keywords as $keyword){
$row = $mysqli->query(" SELECT * FROM photos WHERE tags LIKE '%$keyword%' ");
// loop through each row result
while( $query_result = $row->fetch_assoc() ){
// push result to photos array
array_push($photos, $query_result);
}
}
然而,这可以多次返回相同的表格行,例如,如果我搜索“mod modded”,任何带有“modded”标签的照片都会在两个关键字匹配时被推到顶部数组两次。
如何确保只选择一行?
修改
感谢您的回复,但都没有奏效,我已经实现了我的目标:
$keywords = explode(' ', $keywords);
$photos = array();
// loop through each keyword
foreach($keywords as $keyword){
$row = $mysqli->query(" SELECT * FROM photos WHERE tags LIKE '%$keyword%' ");
// loop through each row result
while( $query_result = $row->fetch_assoc() ){
$dontPush = false;
// check photos array to see if the query_result already exists
foreach($photos as $photo){
if($photo == $query_result){
$dontPush = true;
}
}
if($dontPush === false){
// push result to photos array if it dodesnt already exist
array_push($photos, $query_result);
}
}
}
但这会创建如此多的循环,如果我有一个大数据库,肯定需要很长时间才能返回结果?有没有更好的方法
答案 0 :(得分:1)
尝试选择区别
SELECT DISTINCT * FROM photos WHERE tags LIKE '%$keyword%'
或者,您也可以将LIMIT 1添加到末尾以仅返回第一行。
答案 1 :(得分:1)
试试这个
<?php
$keywords = explode(' ', $keywords);
$photos = array();
$query = " SELECT * FROM photos ";
// loop through each keyword
foreach($keywords as $k => $keyword){
if ($k==0) {
$query .= " WHERE ";
}
$query .= " tags LIKE '%$keyword%' ";
if ($k-1 < count($keywords)) {
$query .= " OR ";
}
}
$row = $mysqli->query( $query );
while( $query_result = $row->fetch_assoc() ){
// push result to photos array
array_push($photos, $query_result);
}
?>
答案 2 :(得分:0)
对于任何有兴趣的人,我设法解决这个问题,以确保不会返回重复项:
$keywords = explode(' ', $keywords);
$photos = array();
$query = " SELECT * FROM photos WHERE tags LIKE ";
// loop through each keyword
foreach($keywords as $i => $keyword){
$query .= "'%$keyword%'";
if($i+1 < count($keywords) ){
$query .= " union SELECT * FROM photos WHERE tags LIKE ";
}
}
$row = $mysqli->query( $query );
// loop through each row result
while( $query_result = $row->fetch_assoc() ){
array_push($photos, $query_result);
}