Поиск результатов по запросу

У меня есть сайт, на котором участники могут отмечать других участников как «избранных». Пользователь может выполнять поиск в таблице участников различными способами, и я хочу показать по любому из результатов, которые возвращаются, являются ли возвращенные пользователи избранными текущего пользователя.

Это очень упрощенный код, который я использовал, чтобы попытаться заставить этот запрос работать, но я просто не могу понять это. Всякий раз, когда я добавляю «GROUP BY», чтобы избежать повторяющихся результатов из моего «LEFT JOIN», оператор «if» не работает. Однако утверждение «если» работает, если я опускаю «GROUP BY», но я получаю все строки из таблицы членов и таблицы избранного. Благодарю.

$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

Решение

Я предлагаю вам использовать один запрос. Простой запрос — это быстрый запрос. Если ваш сайт расширяется, ваш запрос будет медленным и это вызовет проблемы с производительностью.

Идея:

С одной стороны: SELECT FROM members, получить все и поместить его в массив, key = member.id

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

С другой стороны: SELECT * FROM user_favourites и поместите его в предыдущий массив, на который ссылается ключ fav_id, используйте distinc, если у вас есть дубликаты.

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

Отлично, теперь у вас есть все, что вам нужно, массив со всей информацией, итерируйте его.

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>

Удачи

1

По вопросам рекламы [email protected]