Несколько условий для цикличного вывода данных из таблицы
Пожалуйста, помогите! Есть таблица messages. Там столбцы from_id, to_id и messages. Делаю мини-макет мессенджера для сайта, чтобы потом его допилить, но надо разобраться в основе. Проблема в том что я не знаю как мне выводит в одном цикле while сразу несколько условий, чтобы он выдал все как нужно. Что я сделал написано ниже. Не работает, выводит только первые 2 строчки. Пожалуйста, помогите
<?php $query_messages_my = $db->query("SELECT * FROM `messages` WHERE (`to_id` = '2' AND `from_id` = '1')");
$query_messages_him = $db->query("SELECT * FROM `messages` WHERE (`to_id` = '1' AND `from_id` = '2')");
while(($messages_my = $query_messages_my->fetch_assoc()) && ($messages_him = $query_messages_him->fetch_assoc())) {
?>
<div class="my-message">
<?php echo $messages_my['message']; ?>
</div>
<div class="his-message">
<?php echo $messages_him['message']; ?>
</div>
<?php } ?>
Ответы (1 шт):
Автор решения: Denis640Kb
→ Ссылка
Можно сделать таким образом (Сделал по Вашему примеру, но советую использовать предзапросы или PDO):
<?php
$servername = ""; // IP сервера
$username = ""; // Иия пользователя БД
$password = ""; // Пароль пользователя БД
$dbname = ""; // Название базы
$db = mysqli_connect($servername, $username, $password, $dbname); // подключение
$query_messages_my = $db->query("SELECT * FROM `bz` WHERE (`to_id` = '2' AND `from_id` = '1')");
$query_messages_him = $db->query("SELECT * FROM `bz` WHERE (`to_id` = '1' AND `from_id` = '2')");
$Arr1 = array();
$Arr2 = array();
foreach ($query_messages_my as $item){ // Перебираем и помещаем в свой массив.
array_push($Arr1, $item);
}
foreach ($query_messages_him as $item1){ // Перебираем и помещаем в свой массив.
array_push($Arr2, $item1);
}
if (count($Arr1) > count($Arr2)){ // Если в первом ответе больше значений, чем во втором, то за основу берём первый
$count = count($Arr1);
} else { // Если во втором больше, то второй.
$count = count($Arr2);
}
for ($i=0;$i<$count;$i++){
if ($i > $Arr1){ // Если ключей больше, чем значений в первом массиве(брали наибольшее, чтобы всё вывести), то ставим пустое значение, чтобы не было ошибки.
$Arr1[$i]['message'] = "";
}
if ($i > $Arr2){ // Если ключей больше, чем значений во втором массиве, то ставим пустое значение, чтобы не было ошибки.
$Arr2[$i]['message'] = "";
}
// Выводим данные
echo '<div class="my-message">';
echo $Arr1[$i]['message'];
echo '</div>';
echo '<div class="his-message">';
echo $Arr2[$i]['message'];
echo '</div>';
}