[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оптимизирование запроса
Yoda
Представим условную таблицу


id | user_id | item_id | ans
------------------------------
1 | 1 | 5 | .....
------------------------------

2 | 1 | 2 | .....
------------------------------

3 | 2 | 3 | .....
------------------------------

4 | 2 | 4 | .....
------------------------------

5 | 3 | 2 | .....
------------------------------

6 | 4 | 2 | .....


Нужно выводить те поля, в которых для item_id засветился наш пользователь

Если я пользователь с id = 1, то из таблицы я имел дело с item_id = 5 и 2.
Следовательно, мне нужны поля под id = 1, 2, 5, 6.
С item_id = 3 и 4 пользователь пока не сталкивался, значит они ему не нужны

Самый простой вариант, это выбирать всё, а потом отсеивать в цикле по типу


SELECT id FROM ans WHERE user_id = $user_id AND item_id = $item_id LIMIT 1


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

По-моему, мой вариант тяжеловат, потому что ожидается большое количество строк в данной таблице.
Как можно это ускорить?

_____________
Идеальной защиты не существует...
FatCat
ИМХО, 2 запроса.
Первый запрос собирает массив значений item_id для юзера; второй запрос соберет строки по всем нужным item_id.
Ну или с вложенным запросом:
SELECT * FROM table WHERE item_id IN
(
SELECT item_id FROM table WHERE user_id = 1
)


_____________
Бесплатному сыру в дырки не заглядывают...
S.Chushkin
Всё гораздо проще:
SELECT b.* 
FROM test02 a, test02 b
WHERE a.user_id = 1 and b.item_id = a.item_id


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
FatCat
S.Chushkin
Красиво!

_____________
Бесплатному сыру в дырки не заглядывают...
Valick
Цитата (FatCat @ 3.02.2016 - 12:26)
Красиво!

нет не красиво, красиво (а главное правильно) использовать конструкцию JOIN ON

_____________
Стимулятор ~yoomoney - 41001303250491
S.Chushkin
Цитата (Valick @ 3.02.2016 - 13:36)
нет не красиво, красиво (а главное правильно) использовать конструкцию JOIN ON

А я что написал?

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.