несколько полей в выборке mysql

12 3
hYPER-ok
На сайте с 09.10.2010
Offline
71
842

Привет.

Есть таблица значений AAA

id | super_id | side | quantity

1 | 4444 | 0 | 19

2 | 15111 | 0 | 4

3 | 7613 | 1 | 1

4 | 15111 | 0 | 8

Как выбрать следующее: (super_id = 15111 AND quantity = 4) AND (super_id = 15111 AND quantity = 8)

???

вариант с OR работает неверно, написанный вариант вообще не работает (и вроде как не может из-за структуры mysql).

Единственный вариант это - super_id IN (15111,7613) и уже сравнение в массивах php :)

bukachuk
На сайте с 07.09.2008
Offline
97
#1

super_id = 15111 AND (quantity = 4 OR quantity = 8)

Вы условие скажите какое нужно, а то у вас в запросе одно, а в тексте другое

Программирование PHP,Mysql (/ru/forum/934470)
hYPER-ok
На сайте с 09.10.2010
Offline
71
#2

Нужно выбрать super_id с 15111, 7613

где у 15111 установлено quantity = 4, а у 7613 quantity = 1

bukachuk
На сайте с 07.09.2008
Offline
97
#3

(super_id = 15111 AND quantity = 4) OR (super_id = 7613 AND quantity = 1)

Это разве не то?

hYPER-ok
На сайте с 09.10.2010
Offline
71
#4

OR возвращает не точный результат, а именно ИЛИ

а нужно точный (((

а есть варик замутиться с JOIN по количеству нужных параметров???

bukachuk
На сайте с 07.09.2008
Offline
97
#5

Что значит не точный? Вы сколько строк считываете с таблицы? Какой результат получить хотите?

В примере выше должно вернуть 2 строки. А вам какие надо? OR это или, то есть если выполняете хотя бы одно из условий

siv1987
На сайте с 02.04.2009
Offline
427
#6
hYPER-ok:
вариант с OR работает неверно, написанный вариант вообще не работает (и вроде как не может из-за структуры mysql).

Вариант с OR работает как раз верно, а вот AND в вашем варианте по сути не будет работать, потому что не может одновременно и quantity=4 и quantity=8, он либо 8 либо 4 (что и есть в случае OR). /ru/forum/801232

hYPER-ok
На сайте с 09.10.2010
Offline
71
#7

 CREATE TABLE `trade`.`test_table` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`necessary_field` INT NOT NULL DEFAULT '0',
`index_id` INT NOT NULL DEFAULT '0',
`quantity` SMALLINT( 4 ) NOT NULL DEFAULT '0'
) ENGINE = MYISAM

INSERT INTO `trade`.`test_table` (
`id` ,
`necessary_field` ,
`index_id` ,
`quantity`
)
VALUES (
NULL , '7800', '15', '4'
), (
NULL , '7800', '19', '2'
), (
NULL , '7800', '45', '1'
), (
NULL , '7801', '15', '4'
), (
NULL , '7801', '13', '3'
);

А должно вернуть necessary_field 7800;

ну это в смысле в идеале с DISTINCT.

bukachuk
На сайте с 07.09.2008
Offline
97
#8

Ну он Вам возвращает именно то что вы просите. То есть вы либо просите не то, либо структура неправильная. То есть в результатах почему necessary_field = 7801 не подходит под ваши требования? (хотя запросу отвечает)

hYPER-ok
На сайте с 09.10.2010
Offline
71
#9

Я прошу у него через OR, т.е. чтобы один из логических содержаний в скобках искал. А надо через AND (ну если переносить требования в текст), а вот через AND не воркает.

bukachuk
На сайте с 07.09.2008
Offline
97
#10

Значит у вас в структуре проблема, потому что под ваш запрос подходит запись '7801', '15', '4'

Почему запись 7801 не подходит?? с AND конечно работать не будет тк все условия не сойдутся

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий