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

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

Ну вот человек ищет идентичные записи, внутри которых определенные параметры.

А запись 7801 уже называется похожей. А мне бы точность..(

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

Не, конечно варик еще 1 табличку запилить, но всё таки.

siv1987
На сайте с 02.04.2009
Offline
427
#12

В прошлой теме мы остановились на


SELECT T.*
FROM Товары T
WHERE EXISTS(SELECT * FROM характеристики H WHERE H.Id=T.Id AND H.feature_id='pp' and H.value IN ('8','8.7')) AND
EXISTS(SELECT * FROM характеристики H WHERE H.Id=T.Id AND H.feature_id='pos' and H.value IN ('Android', 'iOS'))

SELECT * FROM table t

WHERE EXISTS (SELECT 1 FROM table WHERE t.necessary_field=necessary_field AND index_id=15 AND quantity=4)

AND EXISTS (SELECT 1 FROM table WHERE t.necessary_field=necessary_field AND index_id=19 AND quantity=2)

bukachuk
На сайте с 07.09.2008
Offline
97
#13
siv1987:

SELECT * FROM table t
WHERE EXISTS (SELECT 1 FROM table WHERE t.necessary_field=necessary_field AND index_id=15 AND quantity=4)
AND EXISTS (SELECT 1 FROM table WHERE t.necessary_field=necessary_field AND index_id=19 AND quantity=2)

Будут все 7800, ТС кажется что-то не договаривает:D

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

Да не, без базара вообще.

А тут фуллскан будет же? Индексы не поканают походу (((

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

SELECT * FROM test_table WHERE (index_id=15 AND quantity=4) OR (index_id=19 AND quantity=2)  GROUP BY necessary_field HAVING COUNT(necessary_field) > 1

Это может надо было?

Хотя это тупо догадки, ты вы не говорите полные условия поиска записей и почему 7801 не подходит вам

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

Прелесть, честно :)

но тут тоже без индексов да?)

---------- Добавлено 07.11.2013 в 00:27 ----------

Ну не подходит 7801, т.к. там нет index_id = 19, quantity = 2 :)

---------- Добавлено 07.11.2013 в 00:29 ----------

А не, заиндексил по index_id и quantity, работает, но "Using where; Using temporary; Using filesort", - последние 2 фразы не нравятся :), не пойму почему Using temporary только.

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

SELECT necessary_field FROM `test_table` WHERE necessary_field = (SELECT necessary_field FROM `test_table` WHERE index_id = 19 AND quantity = 2 LIMIT 1) AND  index_id = 15 AND quantity = 4

Мож это?

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

У меня айтемов в сделках бывает по 24 )) = 23 подзапроса, это как-то ну это самое..

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

SELECT t1.necessary_field FROM `test_table` t1 RIGHT JOIN test_table t2 ON t2.necessary_field = t1.necessary_field AND t2.index_id = 19 AND t2.quantity = 2  WHERE t1.index_id = 15 AND t1.quantity = 4

Или что-то в этом роде:D

siv1987
На сайте с 02.04.2009
Offline
427
#20

CREATE INDEX necessary_field ON table (necessary_field, index_id, quantity);

SELECT necessary_field FROM table WHERE (index_id=15 AND quantity=4) OR (index_id=19 AND quantity=2) GROUP BY necessary_field HAVING COUNT(*)=2;

2* - количество блоков с условиями (либо COUNT(*) >= 2)

123

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