我有一个网站,会员可以将其他会员标记为“最喜欢的”。用户能够以各种方式搜索成员表,并且我希望从返回的任何结果中显示,无论用户返回的是否是当前用户的最爱。
这是一些非常简化的代码,我一直试图让这个查询起作用,但我无法理解。每当我添加'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);
?>
答案 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)
<?
//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>
祝你好运