Есть 4 таблицы:
fandom - Название группы диалогов.
dialog - Список диалогов в группе.
dialog_users - Пользователи в каждом диалоге группы.
chat - Сообщения в определенном диалоге.
Задача:
Вывести на страницу профиля диалоги в порядке (Новые выше) + выше новых диалогов выводить те диалоги, в которых добавлены новые сообщения (Пример как ВК, Facebook).
Готовые наработки: Есть вывод диалогов. Нет сортировки по сообщениям.
Код наработок:
$sql_dialog = mysql_query("
SELECT `d`.*,
(SELECT `f_title` FROM `fandom` WHERE `id` = `d`.fandom) AS `f_title`
FROM `dialog_users` d
WHERE `d`.users = '$_SESSION[id]'
GROUP BY `d`.fandom ORDER BY `date` DESC");
while($dialog = mysql_fetch_assoc($sql_dialog)){
$array_dialog[] = $dialog['dialog'];
}
//Вывод сообщений по диалогам
$sql_chat = mysql_query("
SELECT `dialog`,`text`,`status`
FROM `chat`
WHERE `dialog` IN (".implode(',',$array_dialog).")
GROUP BY `dialog` ORDER BY `date` DESC");
while($chat = mysql_fetch_assoc($sql_chat)){
$array_chat[] = $chat['dialog'];
}
foreach(){
//Соединение обеих массивов
}
Идеально было бы сделать все это в одном запросе.
По данному коду мне не понятно, как сделать вывод диалогов по новым сообщениям (За это отвечает поле status(1/0) в таблице chat) и добавление условия, если status = 0 то сортировать только по date.
Если есть мысли как возможно доделать этот код, был бы безмерно благодарен Вашей помощи...
SELECT `d`.*,
(SELECT `f_title` FROM `fandom` WHERE `id` = `d`.fandom) AS `f_title`,
exists(select 1 from `chat` c where c.dialog=d.dialog and status=1) AS `newMsg`
FROM `dialog_users` d
WHERE `d`.users = '$_SESSION[id]'
GROUP BY `d`.fandom
ORDER BY newMsg DESC, `date` DESC
Вместо exists (которое проверяет только наличие таких записей) можно выбирать например количество сообщений в chat или дату последнего нового сообщения.
Или например текст последнего сообщения:
SELECT `d`.*,
(SELECT `f_title` FROM `fandom` WHERE `id` = `d`.fandom) AS `f_title`,
(select text from `chat` c
where c.dialog=d.dialog and status=1
order by c.date desc
limit 1
) AS `lastMsg`
FROM `dialog_users` d
WHERE `d`.users = '$_SESSION[id]'
GROUP BY `d`.fandom
ORDER BY lastMsg DESC, `date` DESC
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Что делают эти операторы в пределах одного выражения? Впервые наткнулся на подобный синтаксисВроде:
Как получить id последнего добавленного елемента? Нашел следующую конструкцию SELECT LAST_INSERT_ID() НО на сколько она безопасна?