Один из вопросов на «Стековерфлоу»

В подкасте Джоел и Джефф говорят об одном из вопросов, который задавал Джефф на сайте stackoverflow.com, и на который Джоел ответил очень изящным решением. Вот он: http://stackoverflow.com/questions/337704/. По-моему, это зашибись.
5 комментариев
Johnny Woo
Зашибись — это когда есть возможность сделать так:
$db->query('SELECT * FROM table WHERE field IN (?@)', array('value', 'value'));
Хотя, конечно, если надо просто один раз выкрутиться — тамошнее решение весьма изящно.
Олег Подчашинский
Я не въехал. Вот есть запрос с WHERE ... IN (...). Что должно произойти после параметризации?
Oleg Andreev
Джоэл предложил на редкость глупое решение. Я несколько раз перечитал на всякий случай.

Вот как это делается в каком-нить руби без лишних библиотек:

names = [«joel», «jeff»]
sql = «select * from Tags where Name in (?)».gsub(«?», names.map{|n| n.to_s.inspect}.join(«,»))

И, в отличие от предложения Джоэла, здесь эффективно используется индекс по полю Name. Возможно, иные подходы мотивированы тем, что в _их_ языках программирования нужно писать в 3,14 раз больше кода для очевиднейшего решения.
Илья Бирман
«Их» языки программирования — говно, это понятно. На ПХП всё это ещё проще. Просто его решение остроумно с точки зрения «чистого программрования», безотносительно реальности :-)
Игорь
капец. все приведенное работает ровно в одном случае: когда у вас табличка из десяти записей и нужно выбрать из нее три. Первое место, где вы обломитесь — длина запроса, второе — скорость разбора, третье — скорость выполнения (хотя это больше относится к решению джоэла, чем к приведенным здесь)
homm
Глупое решение. Для каждой сравниваемой строки будет выполнено дополнительно 2 конкатерации, теряется возможность выборки по индексу. Не вижу причин восхищатся гипотетическими конями в вакууме, безотносительными к реальности.
Популярное