Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2014, 19:25
Аватар для arahmanov
Профессор
Отправить личное сообщение для arahmanov Посмотреть профиль Найти все сообщения от arahmanov
 
Регистрация: 26.01.2011
Сообщений: 197

PHP AND OR XOR
Запутался что то совсем

есть Запрос в базу

"SELECT * FROM sobs WHERE id_kv='$id_kv' AND so='1' AND reg='0' " ;


Нужно:
Выбрать все поля таблицы sobs Где id_kv='$id_kv' и so='1' и reg='0' или gil='1'

Если написать так

"SELECT * FROM sobs WHERE id_kv='$id_kv' AND so='1' AND reg='0'  OR gil='1'" ;

запрос выбирает все поля с gil='1' а мненужно именно либо где gil='1' либо reg='0' но при этом сохранить всеь кусок с AND

Можно обойтись без второго запроса ?
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2014, 22:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от arahmanov
PHP AND OR XOR
У меня для тебя плохие новости: это не PHP, а SQL

А скобки не пробовал ставить? Я чет позабыл SQL..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2014, 10:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Единственное "или" вернет все что совпадает с этим "или" и скобки не помогут.
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2014, 10:40
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
и скобки не помогут
Чет ты гонишь..

id_kv='$id_kv' AND so='1' AND (reg='0' OR gil='1')

А если скобок нет, то по умолчанию оно работает так:

(id_kv='$id_kv' AND so='1' AND reg='0') OR gil='1'

Ибо AND имеет приоритет над OR.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2014, 10:56
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ну вот и вспомнили SQL
Ответить с цитированием
  #6 (permalink)  
Старый 14.02.2014, 10:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

На практике до or не докатывался, но про скобки вспомнил в выражении in

надо попробовать

where in(a, b) and c and d;

пишут что in() эквипенисуально or
Ответить с цитированием
  #7 (permalink)  
Старый 14.02.2014, 11:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
пишут что in() эквипенисуально or
Это когда допустимы несколько значений одной колонки, а не разных.
То есть это когда reg = 0 OR reg = 1, то оно заменяемо на reg in (0, 1).
Тут же другая ситуация.

Сообщение от kostyanet
эквипенисуально
Прям так и пишут? В учебниках чтоль?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2014, 23:00
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Есть некоторые ещи в sql по которым можно судить о заболевании как по симптомам, или типа признакам хреново спроектированной бд. От нее все начинается.

Так вот среди этих признаков использование таких кляуз и кивордов как NOT EXIST, OR, !=

То есть не вдаваясь в детали уже можно сказать что OR вылезло из того места, о котором было думать лень.
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2014, 23:03
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

То есть мы не можем оценивать организм по одной только фаланге пальца, то есть суть приложения по обрывку запроса. Но если мы видим or то может предполагать что аффтар ниасилил какой-нить group by having
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск