SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.12.2011 14:50:47

антигерой
Участник
Откуда: UA, Севастополь
Зарегистрирован: 02.12.2011
Сообщений: 3

Как правильно написать запрос к MySQL базе ??? (and + or)

Думаю чат написать и надо из базы 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 14:58:57)

Неактивен

 

#2 02.12.2011 14:55:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2101

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Думаю, Вы имели в виду не "нулевое", а поле, в котором находитя значение 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`)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 02.12.2011 15:03:10

антигерой
Участник
Откуда: UA, Севастополь
Зарегистрирован: 02.12.2011
Сообщений: 3

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

XXX это id последней подгруженной мессаги и надо вытащить всё, что было написано позже неё.

YYY это номер пользователя, тоесть вытащить конкретно все его мессаги(user1 = YYY) и мессаги из привата(user2 = YYY) - отправленные конкретно ему или ВСЕМ(user2 = 0).

Вот примерно так как-то...

Тоесть как я понял все перечисления типа OR пишутся в скобочках ???

Неактивен

 

#4 02.12.2011 15:08:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2101

Re: Как правильно написать запрос к MySQL базе ??? (and + 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 15:08:45)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 02.12.2011 15:12:45

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 436

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Я бы даже сделал так:
SELECT * FROM `message_base` WHERE `id` > XXX and `user1` = YYY and `user2` IN (0, YYY);


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#6 02.12.2011 15:15:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2101

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Ага, а еще ключик на (user1,user2,id) smile для полного счастья.
Не будем торопить события, может это вообще немного не то что нужно. В частности, топикстартер почему-то старательно утаивает тот факт, может ли быть в поле user2 NULL и что является критерием того, что сообщение ушло всем.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 02.12.2011 16:38:33

антигерой
Участник
Откуда: UA, Севастополь
Зарегистрирован: 02.12.2011
Сообщений: 3

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Я не то чтобы утаиваю... Пожалуй я сам ещё этого не знаю.

Скорее всего это будет поле integer и там не будет нулевого значения.
Тоесть если = 0 то ушло всем, если отлично от нуля то приват конкретному юзеру с этим id в базе.

Спасибо за разъяснения, примерно понял как надо сделать.

Отредактированно антигерой (02.12.2011 16:55:56)

Неактивен

 

#8 02.12.2011 16:40:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2101

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Обрасяйтесь smile.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 13.11.2017 12:13:53

Pon4ik
Участник
Зарегистрирован: 13.11.2017
Сообщений: 1

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

Апп.. Ребятки подскажите как выполнить update запрос только если в поле who значение меньше 3 а если больше не выполнять?
Сейчас у меня так:

UPDATE `таблица` SET `who` = `who`+1 WHERE `who`<'3'

Так добавляет до 3 но если у чела больше чем 3 изначально то начинает добавлять и ему...
Сорян если не в ту ветку...

Отредактированно Pon4ik (13.11.2017 12:15:12)

Неактивен

 

#10 15.11.2017 16:01:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5278

Re: Как правильно написать запрос к MySQL базе ??? (and + or)

вы что-то путаете, не добавляет:


mysql> create table `таблица` (who int);
Query OK, 0 rows affected (0.53 sec)

mysql> insert into `таблица` values(2),(5);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> UPDATE `таблица` SET `who` = `who`+1 WHERE `who`<3;
Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from `таблица`;
+------+
| who  |
+------+
|    3 |
|    5 |
+------+
2 rows in set (0.03 sec)
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson