Задавайте вопросы, мы ответим
Вы не зашли.
А давайте действительно поступим так, как предлагает Вася — Вы напишете
структуру таблиц, тестовые данные, и результат запроса, который Вы хотите
получить. Читать код PHP, разумеется, никто не будет, так же, как и регистри-
роваться на мамбе и общаться там, чтобы в конечном итоге все равно не по-
нять, чего же Вы хотите.
Неактивен
ОК, давайте попробуем.
есть двет таблицы users_m (информация о пользователях) и messages_m(сообщения)
структура таблицы users_m
id (65) login (vika@yandex.ru) first_name (vika)
id (63) login (tufanov@yandex.ru) first_name (sergey)
id (64) login (lena@yandex.ru) first_name (lena)
id (67) login (anton@yandex.ru) first_name (anton)
структура таблицы messages_m учем что мы авторозованы на пользователи (tufanov@yandex.ru) и GET у нашей страницы с сообщениями 63
id (1) id_pol (63) id_otp (67) del_otp (0) del_pol (0) view (0) message (текст 1)
id (2) id_pol (63) id_otp (65) del_otp (0) del_pol (0) view (0) message (текст 2)
id (3) id_pol (65) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 3)
id (4) id_pol (64) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 4)
id (5) id_pol (65) id_otp (63) del_pol (0) del_pol (0) view (0) message (текст 5)
id (6) id_pol (67) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 6)
id_pol - это id получателя сообщения, id_otp - отправителя
del_pol и del_pol я делал для того, что бы если кото отослал сообщенеи и его удалил, то у того кто получил оно осталось, и наоборот. соответственно туда заносяться 1
view - это отметка о просмотре, но на ней я думаю не нужно акцентировать внимание
нужен такой запрос что бы на одной странице выводились пользователи из таблицы users_m, которым отправили сообщения и от которых получили, но они должны не повторяться, если я отправил 65 и от него же получил, он групируеться.
если я получил например от юзера сообение с id 300, на странице выводяться его данные, и отправил id 200, то тже на странице выводяться его данные в дальнейшем вся переписка между ними групируеться, и выводиться только по одному уникальному пользователю
само чтение и переписка ведется в диалоговом окне, там линк такой messages_send.php?id=63&users=65 , где 63 это мой, а 65 того пользователя с которым переписываюсь
запрос на просмотр переписки работает нормально его трогать не нужно, но на всякий случай напишу
$result5 = mysql_query("SELECT u.*, m.* FROM users_m u JOIN (SELECT * FROM messages_m WHERE id_pol = '$id' AND id_otp = '$users' OR id_otp = '$id' AND id_pol = '$users' ORDER BY id DESC) m ON u.id = m.id_otp",$db);
ПОМОГИТЕ ПОЖАЛУЙСТА, а то я нгаправление в психиатрию скоро буду брать
усли понадобиться softora.com/morda логины (tufanov@yandex.ru, lena@yandex.ru) 123456
Неактивен
serj011 написал:
нужен такой запрос что бы на одной странице выводились пользователи из таблицы users_m, которым отправили сообщения и от которых получили, но они должны не повторяться, если я отправил 65 и от него же получил, он групируеться.
Неактивен
ребята вы гении, работает вроде как надо, тока поддаработать непросмотренные, удаление и т.п. с меня бутылка после этого я обязан на вас жениться
Неактивен
ребята у меня теперь не получаеться подгнать к этому запросу "непрочитнные сообщения"
раньше был такой
$result88 = mysql_query("SELECT COUNT(*) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp88 = mysql_fetch_array($result88);
$posts88 = $temp88[0];
$result33 = mysql_query("SELECT SUM(view) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp33 = mysql_fetch_array($result33);
$posts33 = $temp33[0];
if ($posts88 >= $posts33) $view = '_akt'; else $view = '';
сначала считалось общее количество сообщений, потом общее количество просмотров где id_otp = '$myrow5[id]' потом сравнивает и если больше добавляет в цикле к классу приставку подстветки сообщений, а теперь я не пойму как реализовать это. если я пишу сообщение новому пользователю, оно у меня подстечиваеться сразу как не прочитанное, и пока он не прочитал, у меня не "потухнет"
а теперь он работает как то криво, может теперь нужно
принцип отметки о прочтении на странице переписки
$result_view = mysql_query ("UPDATE messages_m SET view='1' WHERE id_pol='$id' AND id_otp='$users'");
может подскажете, если знаете, как реализовать?
Неактивен
Логично непрочитанному сообщению делать view = 1, а прочитанному 0. Тогда, чтобы узнать есть ли непрочитанные сообщения вы считаете sum(view), и, если она больше 0, значит нужно подсвечивать.
Неактивен
я запрос поменял, но не совсем понял что дальше делать?
вот этот кож не нужно использовать или его нужно подкоректировать?
$result88 = mysql_query("SELECT COUNT(*) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp88 = mysql_fetch_array($result88);
$posts88 = $temp88[0];
$result33 = mysql_query("SELECT SUM(view) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp33 = mysql_fetch_array($result33);
$posts33 = $temp33[0];
if ($posts88 >= $posts33) $view = '_akt'; else $view = '';
Неактивен
я так подозреваю, что должно быть что то вроде этого, но явно не оно
if ($myrow5['view'] == "1") $view = ''; else $view = '_akt';
Неактивен
vasya, я не пойму сути измененного запроса, если оставить такой код, он ЧАСТИЧНО работает, вот только когда я отправляю сообщение новому пользователю оно у меня подствечиваться как непрочитанное
if ($myrow5['view'] <= "0") $view = '_akt'; else $view = '';
0 - непрочитанное
Неактивен
serj011 написал:
vasya, я не пойму сути измененного запроса
Данный запрос вместе с выводом информации о пользователе сообщает сумму поля view из переписки с данным юзером.
Если сумма больше 0, значит есть непрочитанные сообщения. Предполагается, что у непрочитанных сообщений view равно 1, у прочитанных 0.
Неактивен
vasya написал:
serj011 написал:
vasya, я не пойму сути измененного запроса
Данный запрос вместе с выводом информации о пользователе сообщает сумму поля view из переписки с данным юзером.
Если сумма больше 0, значит есть непрочитанные сообщения. Предполагается, что у непрочитанных сообщений view равно 1, у прочитанных 0.
я конечно плохо понимаю суть, но мне кажеться что как то не так...
допустим переписка с пользователем продолжаеться некоторое время, и сумма view из переписки с пользователем равна 15!
если 15 больше 0 значит есть не прочитанные!!! значит в любом случае сообщения будут помечены как не прочитанные всегда!
или нужно в цикле состовлять какой то запрос?
типа if ($myrow5['view'] <= "0") $view = '_akt'; else $view = '';
помогите пожалуйста я чего то вообще не могу понять как теперь сделать!
я писал Вам что раньше, когда была одна страница, я в цикле подсчитывал сколько сообщений с этим пользователем, потом сколько просмотров с этим пользователем, а потом примерно такой фунццией if ($myrow5['view'] <= "0") $view = '_akt'; else $view = ''; определял больше или меньше и подставлял через %s подстветку непрочитанных.
а теперь на этой странице есть еще и просто отправленные, они то не должны помечаться как не прочитанные.
Неактивен
serj011 написал:
я конечно плохо понимаю суть, но мне кажеться что как то не так...
допустим переписка с пользователем продолжаеться некоторое время, и сумма view из переписки с пользователем равна 15!
если 15 больше 0 значит есть не прочитанные!!! значит в любом случае сообщения будут помечены как не прочитанные всегда!
Хм. Логично при прочтении пользователем сообщения изменять флаг view с 1 на 0.
Давайте мы определимся, что вы храните в базе 0 или 1, и что вам нужно посчитать. А то каждый о своем говорим.
5 строк с тестовыми данными спасут отца русской демократии
Неактивен
ну это не принципиально, ну вообще при создании сообщения в view заносится 0 - это не прочитанное, а когда я пользователь захожит в переписку view обновляется на 1
$result_view = mysql_query ("UPDATE messages_m SET view='1' WHERE id_pol='$id' AND id_otp='$users'");
раньше было так
Неактивен
В 56 сообщении я предложил вам изменить эту схему и написал запрос, который будет при этом работать. Вы же использовали только запрос, а логику оставили прежней.
Если вы оставляете прежнюю схему, то вам придется как и ранее отдельными запросами считать общее количество сообщений, кол-во прочитанных и сравнивать их.
Неактивен
я честно говоря просто логику не понял, того как Вы это понимаете...
я запрос то изменил, а дальше что нужно делать...?
не могли бы Вы подробнее написать?
Неактивен
vasya написал:
Логично непрочитанному сообщению делать view = 1, а прочитанному 0.
Неактивен
это я понял, я изменю это, я просто вообще не пойму логики, не соображу как дальше. т.е. как мне в цикле подставить класс прочитанного и не прочитанного? и как отмечать когда оно стало прочитанным?
Неактивен
serj011 написал:
это я понял, я изменю это, я просто вообще не пойму логики, не соображу как дальше. т.е. как мне в цикле подставить класс прочитанного и не прочитанного?
Также как и раньше, только условие изменить:
if ($myrow5['view'] > 0) $view = '_akt'; else $view = '';
serj011 написал:
и как отмечать когда оно стало прочитанным?
Также как и раньше (UPDATE ...), только не 0 менять на 1, а наоборот.
Неактивен
ок я попробую.
у меня к Вам вопрос еще как к гуру
Вы хоть и помогли мне с запросом, который вроде рабботает, но мне все же интересно понять хотя бы суть.
весь этот запрос заноситься в $myrow5, может я совсем тупой вопрс задаю но если я напишу допустим echo $myrow5[id], то с какой таблицы вытащится это id?
$result5 = mysql_query("SELECT u.*, m.`view` FROM users_m u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages_m WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, `view` FROM messages_m WHERE id_otp='$myrow2[id]' AND del_pol='0') t GROUP BY id_otp) m ON u.id = m.id_otp;",$db);
$myrow5 = mysql_fetch_array($result5); наверное глупость написал
Неактивен
SELECT u.*, m.`view` FROM users_m u ...
Запрос выбирает все поля из таблицы u (т.е.users_m) и поле view из таблицы m.
Следовательно id будет из таблицы users_m.
Кстати, вместо * лучше в явном виде писать выбираемые поля.
Неактивен
vasya, я уже так наверное и пробовал как Вы говорили, но я Вам писал что оно несовсем получаеться...
я установил в таблице view по умолчанию 1
переделал обновление $result_view = mysql_query ("UPDATE messages_m SET view='0' WHERE id_pol='$id' AND id_otp='$users'"); и
добавил в цикле if ($myrow5['view'] > 0) $view = '_akt'; else $view = ''; .....
проблемма в том когда я отправляю пользователю сообщение оно у меня тоже подсвечиваться как новое, не прочитанное, а когда этот пользователь его прочитает, то и у меня оно тоже "тухнет"...
как быть?
Неактивен
serj011 написал:
вот только когда я отправляю сообщение новому пользователю оно у меня подствечиваться как непрочитанное
Сразу поправлю запрос, чтобы в непрочитанных сообщениях не учитывались отправленные:
Неактивен
нет, с этим запросом что то не то.... он вообще непонятно как выбирает, когда я отправляю сообщение пользователю, вместо того кому отправляю, выводятся мои данные... может ошибка где?
Неактивен
вот это я пропарился я всесто 63 не поставил $ капец сейчас попробую
когда бы Вы еще так посмеялись
Неактивен
Вашими способностями можно только удивляться огромное спасибо... мое предложение жениться на Вас остаеться в силе
Неактивен