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

 
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
Добрый день.

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

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

Думал отправлять запрос в цикле, но если полей в базе будет очень много и будет очень много значений, не будет ли большой нагрузки?
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Код PHP:
  1. $sql = "SELECT * FROM `table` WHERE id IN (".(is_array($s) ? implode(',', $s) : $s).")";
Это если цифры. Если строки, то надо разбирать переменную в массив и не забыть про кавычки вокруг значений при запросе.
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
Спасибо, там как раз цифры
Посетитель
small user social cms
Медаль
Сообщений: 366
Следует помнить, что IN довольно медленный и удобен только для небольших баз.
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
stealthdebuger, есть другие решения без проходов?
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 754
Если 1. Имеется переменная $s, которая может являться или массивом значение, или строкой со значениями через запятую
Вероятно стоит изменить построение логики.
Посетитель
small user social cms
Медаль
Сообщений: 366
lokanaft, приведенный вами запрос наиболее оптимальный в данном случае.
Я просто позволил себе упомянуть об этом немаловажном моменте, т.к. нормальному разработчику необходимо знать подобные вещи при проектировании.
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
stealthdebuger:
при проектировании
Ключевая фраза.
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
Медаль
Сообщений: 366
Ключевая фраза "нормальному разработчику".
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
stealthdebuger, тогда тем более ваше первое сообщение должно было выглядеть немного иначе. Показывая не неправильность приведённого мною решения, а критикуя начинающего пхп девелопера Rossoman-а, за неверное проектирование бд. Так? Или я опять всё не так понял?
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
Медаль
Сообщений: 366
Конечно нет.
Если бы я показывал "неправильность", то и написал бы что так не надо делать, а надо делать вот так.
Кроме того, чуть выше я написал приведенный вами запрос наиболее оптимальный. Этого мало? Могу сказать, что я ответил бы точно также.

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

P.S. Видимо, вы неадекватно вопринимаете мои высказывания сегодня. Тяжелый пятничный вечер?
Редактировалось: 1 раз (Последний: 27 сентября 2013 в 21:21)
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Просто завтра понедельник...
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1035
Во тут споры разразились пока меня не было)
Так все таки, как сделать наиболее оптимальным вариант запроса, учитывая что переменная $s не будет содержать очень много значений (не более 15-20) и содержит только цифры, но выбираемых полей в базе может быть очень много.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.