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

martinelli

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

Код:
SELECT id FROM table1
 
  • Like
Реакции: KorP
c0dex
Повторю (уточню) условие, если кто не так понял.
Есть входящий параметр $search типа строка, в котором может быть или числа через запятую "1,2,4,8" или пустая строка, заранее это не известно. Предварительно готовить запрос средствами PHP по условию задачи нельзя, вся логика должна укладываться в SQL-запрос.

Может приведешь пример запроса, чтобы в разных ветках его в зависимости от параметра $search было бы WHERE или не было? Или хотя бы оптимизировать мой "межгалактический писец"? Или только критиковать умеешь?
 
Предварительно готовить запрос средствами PHP по условию задачи нельзя, вся логика должна укладываться в SQL-запрос.
Ну так и оставьте ваш пример, он вполне работоспособен.
Если для задачи, сойдет. В практике такое лучше не применять :-)
 
martinelli
я не понял это как ваааще? значит из пхп передать $search ты можешь а сделать if (!empty($search)) нет?

делай блин
PHP:
if (!empty($search)) {
$sql = 'SELECT id FROM table1 WHERE id in ('.$search.');';
}else{
$sql = 'SELECT id FROM table1';
}
и да прибудет с тобой сила!
 
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 уже предлагал его ранее.
 
откуда нах в sql $search!!!

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

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

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