Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Думаю чат написать и надо из базы MySQL сообщения дёргать. Структура запроса такая примерно:
select * from message_base where id > XXX and (user1 = YYY or user2 = 0 or user2 = YYY)
Тоесть выдернуть все сообщения с id больше XXX, в которых поле user1 = YYY или user2 нулевое или YYY.
Шото вообще в голову никаких идей не идёт по причине тупости и плохого знания структуры запросов. Может кто подскажет - как сделать правильно ???
Отредактированно антигерой (02.12.2011 18:58:57)
Неактивен
Думаю, Вы имели в виду не "нулевое", а поле, в котором находитя значение NULL.
То есть Ваш вариант как-то так должен выглядеть:
SELECT * FROM `message_base` WHERE `id` > XXX and (`user1` = YYY or `user2` IS NULL or `user2` = YYY);
А что такое XXX и YYY? И к слову, покажите структуру таблицы message_base (show create table `message_base`)
Неактивен
XXX это id последней подгруженной мессаги и надо вытащить всё, что было написано позже неё.
YYY это номер пользователя, тоесть вытащить конкретно все его мессаги(user1 = YYY) и мессаги из привата(user2 = YYY) - отправленные конкретно ему или ВСЕМ(user2 = 0).
Вот примерно так как-то...
Тоесть как я понял все перечисления типа OR пишутся в скобочках ???
Неактивен
Скобки надо ставить там, где приоритет операций нужно учитывать.
В зависимости от того, что является критерием отправки всем - user2 IS NULL или user2=0 запросы:
SELECT * FROM `message_base` WHERE `id` > XXX and `user1` = YYY and ( (`user2` IS NULL) or `user2` = YYY);
или так
SELECT * FROM `message_base` WHERE `id` > XXX and `user1` = YYY and ( `user2` = 0 or `user2` = YYY);
Отредактированно deadka (02.12.2011 19:08:45)
Неактивен
Я бы даже сделал так:
SELECT * FROM `message_base` WHERE `id` > XXX and `user1` = YYY and `user2` IN (0, YYY);
Неактивен
Ага, а еще ключик на (user1,user2,id) для полного счастья.
Не будем торопить события, может это вообще немного не то что нужно. В частности, топикстартер почему-то старательно утаивает тот факт, может ли быть в поле user2 NULL и что является критерием того, что сообщение ушло всем.
Неактивен
Я не то чтобы утаиваю... Пожалуй я сам ещё этого не знаю.
Скорее всего это будет поле integer и там не будет нулевого значения.
Тоесть если = 0 то ушло всем, если отлично от нуля то приват конкретному юзеру с этим id в базе.
Спасибо за разъяснения, примерно понял как надо сделать.
Отредактированно антигерой (02.12.2011 20:55:56)
Неактивен
Обрасяйтесь .
Неактивен
Апп.. Ребятки подскажите как выполнить update запрос только если в поле who значение меньше 3 а если больше не выполнять?
Сейчас у меня так:
Отредактированно Pon4ik (13.11.2017 15:15:12)
Неактивен
вы что-то путаете, не добавляет:
Неактивен
Страниц: 1