Возможно ли изменять параметры запроса взависимости от входящего значения

martinelli

Новичок
есть запрос вида
Код:
SELECT id FROM table1 WHERE id in ('$search');
где $search строка вида "1,2,3,4". Можно ли сделать в рамках SQL-запроса, чтобы в случае, когда $search - пустая строка, выдавались бы все записи из таблицы?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
martinelli
убрать WHERE? +)))
 

martinelli

Новичок
Код:
SELECT id FROM table1 WHERE if ('$search'='', 1=1, id in(0$search))
получилось вот таким способом.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
martinelli
я написал убрать WHERE, а не изобретать этот межгалактический писец.

Код:
SELECT id FROM table1
 
  • Like
Реакции: KorP

martinelli

Новичок
c0dex
Повторю (уточню) условие, если кто не так понял.
Есть входящий параметр $search типа строка, в котором может быть или числа через запятую "1,2,4,8" или пустая строка, заранее это не известно. Предварительно готовить запрос средствами PHP по условию задачи нельзя, вся логика должна укладываться в SQL-запрос.

Может приведешь пример запроса, чтобы в разных ветках его в зависимости от параметра $search было бы WHERE или не было? Или хотя бы оптимизировать мой "межгалактический писец"? Или только критиковать умеешь?
 

shelestov

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

craz

Нестандартное звание
martinelli
я не понял это как ваааще? значит из пхп передать $search ты можешь а сделать if (!empty($search)) нет?

делай блин
PHP:
if (!empty($search)) {
$sql = 'SELECT id FROM table1 WHERE id in ('.$search.');';
}else{
$sql = 'SELECT id FROM table1';
}
и да прибудет с тобой сила!
 

shelestov

я тут часто
martinelli
я не понял это как ваааще? значит из пхп передать $search ты можешь а сделать if (!empty($search)) нет?

делай блин
PHP:
if (!empty($search)) {
$sql = 'SELECT id FROM table1 WHERE id in ('.$search.');';
}else{
$sql = 'SELECT id FROM table1';
}
и да прибудет с тобой сила!
По условиям задачи проверку строки нужно проверить в SQL.
Твой пример правильный, но не соответствует условиям задачи.
Тем более c0dex уже предлагал его ранее.
 

craz

Нестандартное звание
откуда нах в sql $search!!!

Можно в ухе нагой ковырятся
писать вот такой мегаписец ('$search'='', 1=1, id in(0$search)) - но я разочарую это переменная php и приготовлена она в php и там же определена

и если на то пошло то раз он такой угрюмый и готовит данные прямо в sql пускай напишет чему у него действительно равен $search сиквеле.
 

shelestov

я тут часто
откуда нах в sql $search!!!

Можно в ухе нагой ковырятся
писать вот такой мегаписец ('$search'='', 1=1, id in(0$search)) - но я разочарую это переменная php и приготовлена она в php и там же определена

и если на то пошло то раз он такой угрюмый и готовит данные прямо в sql пускай напишет чему у него действительно равен $search сиквеле.
Скажем так:
Его вариант более приближен к условию задачи, хотя и ужасен по реализации.
Не хочу разводить холиваров, я сам полностью поддерживаю предложенный c0dex и тобой вариант, если его записать еще немного короче:
PHP:
$sql = 'SELECT id FROM table1 '.(!empty($search) ? ' WHERE id in ('.$search.')' : '');
 

craz

Нестандартное звание
Скажем так:
Его вариант более приближен к условию задачи, хотя и ужасен по реализации.
Не хочу разводить холиваров, я сам полностью поддерживаю предложенный c0dex и тобой вариант, если его записать еще немного короче:
PHP:
$sql = 'SELECT id FROM table1 '.(!empty($search) ? ' WHERE id in ('.$search.')' : '');
не читабельно, не удобно для рефакторинга.
 

martinelli

Новичок
Задача не имеет практического значения, считайте что это олимпиадная задачка на проверку мозгов. Конечно в реальной задаче я бы такой фигней не занимался бы, но вот такие условия задачи и пока я ни от кого не увидел ничего стоящего.

P.S. забыл уточнить на всякий случай, что значения в id целые числа больше 0
 
Сверху