Нужна помощь с моим скриптом ЛС
82 сообщения
#15 лет назад
Мне как раз нужно вывести все id которые общались каким либо образом с id 4943439В последствии на основе этого скрипта у каждого юзера будет "Мои сообщения", где будет храниться вся переписка.
Пример как сайт знакомств Мамба, понравилось как там реализовано!
82 сообщения
#15 лет назад

Выдал вот это, что не совсем верно. мне нужно что бы он выплюнул id уникальные

т.е. : 1,2,4 - это пользователи с которыми было хоть одно сообщение
82 сообщения
#15 лет назад
И при скрипте вида:$q_z1=mysql_query("SELECT DISTINCT from_user_id, to_user_id
FROM msg
WHERE ".$_SESSION." IN (from_user_id, to_user_id)
"

// Выводим таблицу:
while ($f_m1 = mysql_fetch_array($q_z1))
{
echo $f_m1.'-'.$f_m1.'<br><br>';
}
ВЫВОДИТ:
1-4943439
4943439-1
4943439-4
2-4943439
4943439-2
Т.е. Выводит отправленное сообщение и ответ на сообщение, а нужно что бы выводил только уникальные ид: 1,2,4
400 сообщений
#15 лет назад
artforever, ну он и так выводит уникальные id, с которыми была переписка, в отправке или в получении. Больше наверно никак не сделать, только в два запроса, т.е.SELECT DISTINCT from_user_id
FROM msg
WHERE to_user_id=4943439;
SELECT DISTINCT to_user_id
FROM msg
WHERE from_user_id=4943439;
А потом в скрипте спаять два массива.
82 сообщения
#15 лет назад
Вопрос, согласин спаять два массива, но каким образом из него убрать все повторы?
400 сообщений
#15 лет назад
А можно вот так попробовать:SELECT DISTINCT IF(from_user_id=4943439, to_user_id, from_user_id) AS user_id
FROM msg
WHERE 4943439 IN (from_user_id, to_user_id)
82 сообщения
#15 лет назад
Вы не поверите! Оно работает! phpmaniac, ты из москвы?
82 сообщения
#15 лет назад
Я сейчас убегаю. С меня пиво. Вопрос по сортировке:
ORDER BY msg_id DESC - здесь все правильно с кем я последним общался тот и сверху
но как мне сделать, когда мне приходит сообщение, что бы он ещё и сверху становился
я делал ORDER BY msg_id AND new DESC , но к сожалению для него приоритетом становиться new,
т.е. если человек не прочитал мое сообщение он ставит его сверху.
400 сообщений
#15 лет назад
artforever, я не совсем из москвы. Там же у тебя правильно было в запросе, сделай ORDER BY new, msg_id DESC
82 сообщения
#15 лет назад
В общем сортировка вида ORDER BY msg_id DESC - очень правильная,может ява скриптом сверху сообщения выводить?
в базе новое сообщение для меня, которое я не читал:
1 4943439 Ну и что скажешь, Админ? 26-10-2009 22:06 1
Сообщение для пользователя и он его не прочитал:
4943439 1 Все ок у Админа! 26-10-2009 22:36 1
Вот мне сообщения вида:
1 4943439 Ну и что скажешь, Админ? 26-10-2009 22:06 1
нужно выводить сверху, но учитывая сортировку ORDER BY msg_id DESC, которая идеально выводит сверху юзера, с которым я последний раз общался
82 сообщения
#15 лет назад
phpmaniac, к сожалению такого вида сортировка не приводит ни к чему, новое сообщения для меня в самом низу, а с кем я общался последний раз в середине
82 сообщения
#15 лет назад
phpmaniac, да я хотел ящиком пивка тебя угостить
82 сообщения
#15 лет назад
Блин вот при таком запросе: ORDER BY new DESC - новые сообщения сверхупри таком ORDER BY msg_id DESC - последний с кем общался сверху


Сейчас попробовал ORDER BY msg_id DESC - не верно почему-то сортирует
82 сообщения
#15 лет назад
Проблема кроется в IF( from_user_id ='".$_SESSION."', to_user_id, from_user_id ) AS user_id
400 сообщений
82 сообщения
#15 лет назад
Не сортирует
82 сообщения
#15 лет назад
Я понимаю, что из-за DISTINCT IF( from_user_id ='".$_SESSION."', to_user_id, from_user_id) AS user_id - он тут при запросе к базе выводитuser_id
1
2
4
82 сообщения
#15 лет назад
Дамп здесь:mamylya.ru/msg.sql.zip
82 сообщения
#15 лет назад
Выводиться все правильно, только сортировка
400 сообщений
#15 лет назад
На самом деле он всё правильно сортирует. У тебя там даты с временем неправильные (кстати, почему они в разных полях? лучше одно поле типа DATETIME). Кроме того, DATE и TIME - зарезервированные слова, их надо бы брать в апострофы `вот такие`.Короче, переделай таблицу так:
Цитата:
CREATE TABLE `msg` (
`msg_id` int(11) NOT NULL auto_increment,
`from_user_id` varchar(255) NOT NULL,
`to_user_id` varchar(255) NOT NULL,
`text` text NOT NULL,
`msg_date` DATETIME NOT NULL,
`new` int(11) NOT NULL,
PRIMARY KEY (`msg_id`)
);
И запрашивай так:
Цитата:
SELECT DISTINCT IF(from_user_id=4943439, to_user_id, from_user_id) AS user_id
FROM msg
WHERE 4943439 IN (from_user_id, to_user_id)
ORDER BY new DESC, msg_date DESC
Т.е. после каждого параметра сортировки писать надо, что по убыванию.