我正在使用Sphinx搜索来搜索我网站上的项目。我是否正在使用foreach来查找搜索来自哪里的索引? Foreach循环将迭代搜索词匹配的所有项目,并找出索引。
数据库中的所有项目都有user_id从用户表中引用用户。所以,我要输出的内容是显示少量项目(搜索)并将其放在该用户下。如果搜索' Book&#39 ;,然后输出像这样
Alex //Book1,Book2,Book3 all of them has user_id of 2 which refers to Alex
Book1
Book2
Book3
Jordan //Book11,Book12,Book18 all of them has user_id of 5 which refers to Joradn
Book11
Book12
Book18
and so on.
以下是
的代码foreach ( $res["matches"] as $doc => $docinfo ) {
switch($docinfo['attrs']['table_id']) {
case 1: //if search come from index 1
$res_db = mysqli_query($connect3,'select id_2, image, user_id, title, detail from lunch_menu where id_2 = (('.$doc.'-300000))');
if ($res_db === false) {
echo "Error in mysql query #" . mysqli_errno($connect) . ' - ' . mysqli_error($connect);
} else {
$row = mysqli_fetch_assoc($res_db);
$connect4=mysqli_connect('localhost', 'root', '','user');
$sql2="SELECT * FROM `user`.`user_det` WHERE id='".$row['user_id']."' GROUP BY id ORDER
BY id DESC";
$query2=mysqli_query($connect4,$sql2);
while($row2 = mysqli_fetch_assoc($query2)){ //line X
$userx=$row2['id'];
$image=$row2['img'];
$busi_title=$row2['busi_title'];
$page_owner.="<img src='../../account/$userx/$image' width='140'
height='140'><b>$busi_title</b><hr>";
$res_db2 = mysqli_query($connect3,'select id_2, image, user_id, title, detail from
lunch_menu where id_2 in ((' . $doc . '-300000)) order by field(id_2,('.$doc.'-300000))');
$alu="";
while($row3 = mysqli_fetch_assoc($res_db2)){
$alu.=
'<img src="../../'.$row3['user_id'].'/lunch/'.$row3['image'].'" width="100" height="100">'
. '<a href="../../'.$row3['user_id'].'/menu_item2.php">' . $row3['title'] . '<a>'
. '<br/> '.$row3['detail'].'<br><br><br><br>' ;
}
$all.="<div id='' style='border:2px solid black;'>".$page_owner.".".$alu."</div>";
}
}
但是上面的代码给了我这样的结果
Alex
Book1
Alex
Book2
Alex
Book3
Jordan
Book11
Jordan
Book12
Jordan
Book18
and so on.
我需要做哪些修改才能使我的代码像预期的那样工作。我已尽力找到解决方案,但没有帮助。所以,只是建立了一个SO帐户来发布问题。
请帮助,如果可以的话。那真是太棒了。
提前致谢
谢谢Ryan的回复。我们几乎在那里
另外1个修复,然后我们就完成了。现在我得到的是
Problem
Result is almost the way,I was looking for except for the first one.This is what I'm getting
Alex
Book1
Jordan
Book11
Book12
Book18
Alex
Book2
Book3
如果我可以在回显order by user_id
之前执行临时$all
,则可能会修复此错误。
因为$all
打印user
及其corresponding item
在数据库中的排序方式
请注意,我使用了第二种方式,你展示了。第一种方式不起作用。
我已经找到问题的第二部分。要达到预期效果,我需要这样做
$cl->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC,user_id ASC');
此行代码首先输出最相关的搜索结果,然后按user_id
Ascending进行分类。
Special Thanks to Ryan
答案 0 :(得分:2)
所以我对重复用户的起源有点困惑,因为我不确切知道你要查询的内容,但我知道可能导致它的原因。
首先,如果内循环是问题,它是一个简单的修复。只显示&#39; user_id&#39;在第一次循环。
$alu="";
$firstLoop = true;
while($row3 = mysqli_fetch_assoc($res_db2)){
if($firstLoop){
$alu.= '<img src="../../'.$row3['user_id'].'/lunch/'.$row3['image'].'" width="100" height="100">'
$firstLoop = false;
}
$alu.= '<a href="../../'.$row3['user_id'].'/menu_item2.php">' . row3['title'] . '<a>'
. '<br/> '.$row3['detail'].'<br><br><br><br>' ;
}
或者,正如Sean建议的那样,它可能会发生在外部循环中。在这种情况下,我们可以跟踪以前的用户,以确定是否应该设置$ userx并使用$ page_owner。
$prevUsr = '';
foreach ( $res["matches"] as $doc => $docinfo ) {
switch($docinfo['attrs']['table_id']) {
case 1: //if search come from index 1
$res_db = mysqli_query($connect3,'select id_2, image, user_id, title, detail from lunch_menu where id_2 = (('.$doc.'-300000))');
if ($res_db === false) {
echo "Error in mysql query #" . mysqli_errno($connect) . ' - ' . mysqli_error($connect);
} else {
$row = mysqli_fetch_assoc($res_db);
$connect4=mysqli_connect('localhost', 'root', '','user');
$sql2="SELECT * FROM `user`.`user_det` WHERE id='".$row['user_id']."' GROUP BY id ORDER
BY id DESC";
$query2=mysqli_query($connect4,$sql2);
while($row2 = mysqli_fetch_assoc($query2)){
$userx=$row2['id'];
$image=$row2['img'];
$busi_title=$row2['busi_title'];
$page_owner.="";
// only set the page owner if the user id is different
if($prevUsr != $userx){
$page_owner.="<img src='../../account/$userx/$image' width='140'
height='140'><b>$busi_title</b><hr>";
$prevUsr = $userx;
}
$res_db2 = mysqli_query($connect3,'select id_2, image, user_id, title, detail from
lunch_menu where id_2 in ((' . $doc . '-300000)) order by field(id_2,('.$doc.'-300000))');
$alu="";
while($row3 = mysqli_fetch_assoc($res_db2)){
$alu.=
'<img src="../../'.$row3['user_id'].'/lunch/'.$row3['image'].'" width="100" height="100">'
. '<a href="../../'.$row3['user_id'].'/menu_item2.php">' . $row3['title'] . '<a>'
. '<br/> '.$row3['detail'].'<br><br><br><br>' ;
}
$all="<div id='' style='border:2px solid black;'>".$page_owner.".".$alu."</div>";
}
}
我希望其中一个可以帮助你。
快乐的编码。 莱恩