Возможен ли такой запрос sql?

#1 27 сентября 2013 в 18:08
Добрый день.

Уважаемые знатоки, подскажите, возможно ли внутри скрипта php сделать такой запрос к бд:

1. Имеется переменная $s, которая может являться или массивом значение, или строкой со значениями через запятую.
2. Я делаю запрос к бд следующего плана
  1.  
  2. SELECT * FROM `table` WHERE ???
  3.  
Как мне в запрос вставить множество условий, если я изначально не знаю сколько значений у меня будет записано в переменную $s ?

Думал отправлять запрос в цикле, но если полей в базе будет очень много и будет очень много значений, не будет ли большой нагрузки?
#2 27 сентября 2013 в 18:15
  1. $sql = "SELECT * FROM `table` WHERE id IN (".(is_array($s) ? implode(',', $s) : $s).")";
Это если цифры. Если строки, то надо разбирать переменную в массив и не забыть про кавычки вокруг значений при запросе.
#3 27 сентября 2013 в 18:18
Спасибо, там как раз цифры
#4 27 сентября 2013 в 19:53
Следует помнить, что IN довольно медленный и удобен только для небольших баз.
#5 27 сентября 2013 в 20:03
stealthdebuger, есть другие решения без проходов?
#6 27 сентября 2013 в 20:16
Если 1. Имеется переменная $s, которая может являться или массивом значение, или строкой со значениями через запятую
Вероятно стоит изменить построение логики.
#7 27 сентября 2013 в 20:35
lokanaft, приведенный вами запрос наиболее оптимальный в данном случае.
Я просто позволил себе упомянуть об этом немаловажном моменте, т.к. нормальному разработчику необходимо знать подобные вещи при проектировании.
#8 27 сентября 2013 в 20:59

при проектировании

stealthdebuger
Ключевая фраза.
#9 27 сентября 2013 в 21:00
Ключевая фраза "нормальному разработчику".
#10 27 сентября 2013 в 21:09
stealthdebuger, тогда тем более ваше первое сообщение должно было выглядеть немного иначе. Показывая не неправильность приведённого мною решения, а критикуя начинающего пхп девелопера Rossoman-а, за неверное проектирование бд. Так? Или я опять всё не так понял?
#11 27 сентября 2013 в 21:21
Конечно нет.
Если бы я показывал "неправильность", то и написал бы что так не надо делать, а надо делать вот так.
Кроме того, чуть выше я написал приведенный вами запрос наиболее оптимальный. Этого мало? Могу сказать, что я ответил бы точно также.

Критиковать Rossoman… за что? За то, что человек пришел и попросил совета/помощи?
Грешно отказывать в помощи. Грешно проходить мимо страждущих. Грешно смеяться над убогими.

P.S. Видимо, вы неадекватно вопринимаете мои высказывания сегодня. Тяжелый пятничный вечер?
#12 27 сентября 2013 в 21:27
Просто завтра понедельник…
#13 28 сентября 2013 в 00:32
Во тут споры разразились пока меня не было)
Так все таки, как сделать наиболее оптимальным вариант запроса, учитывая что переменная $s не будет содержать очень много значений (не более 15-20) и содержит только цифры, но выбираемых полей в базе может быть очень много.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.