Подскажите как будет правильно, чтобы минимизировать количество запросов к базе?

WMix

герр M:)ller
Партнер клуба
эти 2 запроса эквивалентны
PHP:
SELECT `v` FROM `test1` WHERE `v` IN (3, 4, 5, 6, 7, 8) AND `v` NOT IN (4, 6);
PHP:
SELECT `v` FROM `test1` WHERE `v` IN (3, 5, 7, 8) ;
 

AnrDaemon

Продвинутый новичок
Конечно. Я даже не удивлюсь, если SQL оптимизатор делает это ДО запроса в БД.
 

WMix

герр M:)ller
Партнер клуба
тебя не учили, что всё, что PHP может сделать сам, он должен делать сам? В твоём примере ты делаешь дурную работу, когда мог сразу послать SQL серверу нужный запрос.
 

AnrDaemon

Продвинутый новичок
Это был тест. Реальный запрос может быть сложнее, либо содержать подзапросы.
 

WMix

герр M:)ller
Партнер клуба
извените, ваше величество, я был дерзок, и не осозновал, что ваша мысль была на много глубже
 

AnrDaemon

Продвинутый новичок
Давай без этого, а? Я не вижу смысла писать в PHP то, что SQL сам за меня сделает. Использование стандартных библиотек, знаете ли, ускоряет разработку и защищает от глупых ошибок.
 

stalxed

Новичок
Давай без этого, а? Я не вижу смысла писать в PHP то, что SQL сам за меня сделает. Использование стандартных библиотек, знаете ли, ускоряет разработку и защищает от глупых ошибок.
AnrDaemon, я признаюсь, не могу такое осилить на SQL.
Но было бы очень интересно взглянуть на подобный SQL запрос.
Если вы профи, напишите пожалуйста.

Как понимаю, вы не понимаете задачу? Вот её чёткое ТЗ:
1) Есть таблица с названием таблица.
2) В таблице таблица есть поля id, поле 1, поле 2, поле 3.
3) Данные изображены на скриншоте:

4) Необходимо выполнить поиск несуществующих значений из списка ['a', 'b', 'e', 'g', 'u'] по полю поле 2.
5) Должен вернуться результат ['e', 'u'], таких значений нет в БД.
 

fixxxer

К.О.
Партнер клуба
PHP:
select L.letter 
from (
  select 'a' as letter
  union all select 'b'
  union all select 'e'
  union all select 'g'
  union all select 'u'
) L
left join T on (T.field2 = L.letter) 
where T.field2 is null
 
Сверху