|
|
|
| Доброго времени суток!
<?php
Table clients:
----------------------------
id | name | link | pict |
-----------------------------
Table messages:
--------------------------------
id | from_id | to_id | text |
--------------------------------
где "from_id" - id автора сообщения,
"to_id" - id получателя сообщения.
?>
|
Нужно вывести все сообщения пользователя, адресованные ему и написанные им:
<?php
$your_messages=mysql_query("SELECT * FROM `messages` WHERE `from_id`='$your_id' OR `to_id`='$your_id'");
//...
?>
|
но так, чтобы с text из таблицы "messages" "подхватывать" из таблицы "clients" name, link & pict авторов сообщений.
Благодарю заранее! | |
|
|
|
|
|
|
|
для: Deed
(15.02.2015 в 20:42)
| |
-- <?
SELECT
c.*,
m.id,
m.text,
'your_message' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.to_id = c.id
WHERE m.from_id = 111
UNION ALL
SELECT
c.*,
m.id,
m.text,
'message_to_you' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.from_id = c.id
WHERE m.to_id = 111
|
| |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2015 в 21:28)
| | Спасибо большое!
Но как разобрать это в цикле?
И что такое AS `direction` ?
Еще более огромное спасибо!
P.S. Начинаю "врубляться"... Но как вывести два изображения - автора сообщения и получателя?? | |
|
|
|
|
|
|
|
для: Deed
(15.02.2015 в 21:47)
| | Ну вы же запрашиваете это для какого-то конкретного юзера.
В моем примере с id = 111
Значит его данные, в том числе и фото, можно получить предварительно. Верно?
Допустим мы загрузили их в $user.
А далее в цикле перебираем результат запроса.
Вот тут-то нам и понадобится дополнительное поле direction, которое показывает направление письма.
Т.е. если direction == 'your_message', то наш $user - это отправитель. Его данные и фото мы выводим из $user, а получатель у нас в запросе.
А если direction == 'message_to_you', то отправитель в результате запроса, а получатель - наш $user.
Естессно вместо direction можно любой другой идентификатор. Можно вообще флаг is_incoming со значениями 0 и 1. Тут как вам проще ориентироваться. | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2015 в 22:58)
| | Мммм... Да, Вы хорошо объяснили. Моя Вам благодарность!
Но каприз в том, что нужен такой вывод:
[фото (юзер или адресат)] -> [фото (адресат или юзер)] дата коммента
ТЕКСТ...
|
То есть, нужны данные и отправителя и получателя каждого сообщения, как ни прискорбно. | |
|
|
|
|
|
|
|
для: Deed
(15.02.2015 в 23:10)
| | И в чем проблема?
<?php
$user = загружаем
$res = делаем запрос к БД
while($row = mysqli_fetch_assoc($res)){
if($row['direction'] == 'your_message'){
$sender_photo = $user['pict'];
$sender_name = $user['name'];
$getter_photo = $row['pict'];
$getter_name = $row['name'];
}
else{
$sender_photo = $row['pict'];
$sender_name = $row['name'];
$getter_photo = $user['pict'];
$getter_name = $user['name'];
}
echo "Отправитель: <img src='$sender_photo' /> $sender_name<br>";
echo "Получатель: <img src='$getter_photo' /> $getter_name<br>";
echo 'Дата: ' . $row['date']; // ее кстати надо еще добавить в запрос. В ващих показанных таблицах ее не было
echo 'Сообщение: ' . $row['text'];
}
|
| |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2015 в 23:27)
| | Ну, не знаю, как благодарить!
Спасибо Вам!
Там сложная таблица, и я привел очень-очень упрощенный пример, чтобы понять сам принцип составления запроса.
Благодаря Вам, проблема уже близка к разрешению.
Я попробую остальное "додумать" сам - так знания лучше закрепляются.
Спасибо!! | |
|
|
|
|
|
|
|
для: Deed
(15.02.2015 в 23:52)
| | Когда у человека такой подход, то и помочь приятно! ) | |
|
|
|
|
|
|
|
для: Sfinks
(16.02.2015 в 00:10)
| | Спасибо за помощь и добрые слова.
Однако, неразрешимая (для меня) ситуация.
//Table messages:
---------------------------------------------
id | thred | from_id | to_id | text |
---------------------------------------------
1 | 1 | 23 | 54 | tttt |
---------------------------------------------
2 | 1 | 54 | 23 | ffff |
---------------------------------------------
3 | 3 | 74 | 10 | yyy |
---------------------------------------------
4 | 1 | 23 | 54 | rrrr |
---------------------------------------------
...
|
В таблице есть столбец "трэд", общий для всех реплик одного диалога.
Подскажите, пожалуйста, как прописать ORDER BY, чтобы шла сортировка реплик по id внутри каждого треда.
-- <?
( SELECT
c.*,
m.id,
m.thred,
m.text,
'your_message' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.to_id = c.id
WHERE m.from_id = 111
ORDER BY m.id)
UNION ALL
(SELECT
c.*,
m.id,
m.thred,
m.text,
'message_to_you' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.from_id = c.id
WHERE m.to_id = 111
ORDER BY m.id)
ORDER BY m.thred
|
Сортировка по тредам происходит, а вот по id внутри треда выводится вразнобой.
Кажись, решено:
-- <?
( SELECT
c.*,
m.id,
m.thred,
m.text,
'your_message' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.to_id = c.id
WHERE m.from_id = 111
ORDER BY m.id)
UNION ALL
(SELECT
c.*,
m.id,
m.thred,
m.text,
'message_to_you' AS `direction`
FROM messages AS m
JOIN clients AS c
ON m.from_id = c.id
WHERE m.to_id = 111
ORDER BY m.id)
ORDER BY m.thred, m.id
|
Множественный ORDER BY: http://stackoverflow.com/questions/7015839/left-outer-join-with-conditions-where-order-by | |
|
|
|