gpt4 book ai didi

php - foreach 循环内嵌套 while 循环的结果集结构

转载 作者:行者123 更新时间:2023-11-29 07:47:37 24 4
gpt4 key购买 nike

我正在使用 Sphinx 搜索来搜索我网站上的项目。我正在使用 foreach 来查找索引,搜索来自哪里? Foreach 循环将迭代所有与搜索项匹配的项目并找出索引。

数据库中的所有项目都有 user_id 引用用户表中的用户。因此,我想要输出的是显示几个项目(搜索)并将其放在该用户下。如果搜索“Book”,则输出如下这个

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

如果我可以在回显 $all 之前执行临时order by user_id,则此错误可能会得到修复。

因为$all打印user并且它是对应的项目,它在数据库中的排序方式

请注意,我正在使用第二种方式,您展示了。第一种方式不起作用。

我已经解决了问题的第二部分。为了达到预期的结果,我需要这样做

$cl->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC,user_id ASC');

这行代码首先输出最相关的搜索结果,并按user_id升序分类。

特别感谢 Ryan

最佳答案

所以我对重复用户的来源有点困惑,因为我不知道你到底在查询什么,但我知道可能导致它的原因。

首先,如果内部循环是问题所在,那么修复方法很简单。仅在第一次循环时显示“user_id”。

                $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>' ;
}

或者,正如肖恩建议的那样,它可能发生在外部循环中。在这种情况下,我们可以跟踪前一个用户来确定是否应设置 $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>";
}
}

我希望其中之一对您有所帮助。

祝你编码愉快。瑞安

关于php - foreach 循环内嵌套 while 循环的结果集结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com