搜索查询结果

时间:2014-09-23 19:37:30

标签: php mysql favorites

我有一个网站,会员可以将其他会员标记为“最喜欢的”。用户能够以各种方式搜索成员表,并且我希望从返回的任何结果中显示,无论用户返回的是否是当前用户的最爱。

这是一些非常简化的代码,我一直试图让这个查询起作用,但我无法理解。每当我添加'GROUP BY'以避免来自LEFT JOIN的重复结果时,'if'语句不起作用。但是,'if'语句确实有效,如果我省略'GROUP BY'但我从members表和favorites表中获取所有行。谢谢。         

$result = mysqli_query($db_conx, "SELECT members.*, user_favourites.* FROM members LEFT JOIN user_favourites ON members.id = user_favourites.fav_id GROUP BY members.id");

echo "<table border=''>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Email</th>
<th>A favourite of User</th>
</tr>";

while($row = mysqli_fetch_array($result)) {

echo "<tr>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lname'] . "</td>";
echo "<td>" . $row['email'] . "</td>";

if ($visitor ==  $userid ){
  $msgs = "x"; 
}
else { $msgs = "0";
}
echo "<td>". $msgs. "</td>";

  echo "</tr>";
}

echo "</table>";

mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:1)

我建议你使用2个问题来查看。简单查询是一个快速查询。如果您的网站向上扩展,您的查询将会很慢查询并导致性能问题。

点子:

一方面:SELECT FROM members,get all并将其放在array中,key = member.id

$members[$row['member_id']]=$row;

另一方面:SELECT * FROM user_favourites,并将其放在上一个数组中,如果你有重复项,请使用关键字fav_id使用distinc。

$members[$row['fav_id']]['favourites']=$row;

完美现在你拥有所有需要的东西,一个包含所有信息的数组,迭代它。

答案 1 :(得分:1)

JilianJ是这样的:

<?

//Prepare
$all_users=array()
$query_users='SELECT * from user';
$query_favourites='SELECT * FROM user_favourites';


//Now I find all members information
$users=mysqli_query($db_conx,$query_users);
while($user = mysqli_fetch_array($users)) {
   $all_users[$user['id']]=$user;
}

//Now I add favourite information to the users information
$favourites=mysqli_query($db_conx,$query_favourites);
while($favourite = mysqli_fetch_array($favourites)) {
   $all_users[$favourite['fav_id']]['fovourite'][]=$favourite['fav_id'];
}

?>


<table>
   <tr>
      <th>Firstname</th>
      <th>Lastname</th>
      <th>Email</th>
      <th>A favourite of User</th>
   </tr>

   <? foreach ($information as $key=>$item) {?>
         <tr>
            <td><?=$item['firstname'];?></td>
            <td><?=$row['lname'];?></td>
            <td><?=$row['email'];?></td>
            <td>
               <? foreach($item['favourites'] as $key2=>$item2) { ?>
                     <p><?=$all_members[$item2]['name];?></p>
               <? } ?>
            </td>
         </tr>
   <? } ?>
</table>
祝你好运