Итак, есть таблица в базе данных.
Например, содержит поля: id, name, num1, num2, num3, num4, num5
1, шарик, 1,0,0,0,1
2, кубик, 1,1,1,1,1
3, пирамида, 0,0,0,1,1
В общем в numах -определяется есть ли какое-либо свойство у данного предмета (1 - есть, 0-нет).
Думаю, с этим понятно.
Далее создаю форму с 5 чекбоксами для каждого numа. Т. е. если галочку поставить - то будет передаваться значение 1. Если поставлено две галочки, то должны выбираться предметы которые в этих столбцах оба имеют значения '1'.
Если делаю такой запрос для обработчика:
SELECT * FROM таблица WHERE num1='$_POST[num1]' AND num2='$_POST[num2]' AND num3='$_POST[num3]' AND num4='$_POST[num4]' AND num5='$_POST[num5]
и например, выбираю в форме num2='1' и num4='1', то все остальные столбцы так как не поставлены галочки, не передают переменные и считается, что num1='0', num3='0',...
а нужно чтобы вытаскивало, где num2='1' и num4='1', а остальные ячейки - неважно будет ли там 1 или 0.Вывод результатов при фильтровании чекбоксами
Спустя 19 минут, 19 секунд (28.02.2010 - 16:41) Sqaier написал(а):
Конечно можно сделать чтобы шла проверка:
если только num1=1, то запрос только с ним
если только num2=1, то запрос только с ним
если num1=1 num3=1, то в запросе ...WHERE num1='$_POST[num1]' AND num3='$_POST[num3]'"
Но в данном случае нужно этих циклов if(){запрос} - 15 штук. а если этих свойств 10-15 штук, тогда вообще длинный код. Switch может немного помочь, но не сильно.
Вот если бы эти циклы if(){} в самом запросе можно было, т.е.
SELECT * FROM таблица WHERE if(num1='1'){num1='$_POST[num1]'}...
если только num1=1, то запрос только с ним
если только num2=1, то запрос только с ним
если num1=1 num3=1, то в запросе ...WHERE num1='$_POST[num1]' AND num3='$_POST[num3]'"
Но в данном случае нужно этих циклов if(){запрос} - 15 штук. а если этих свойств 10-15 штук, тогда вообще длинный код. Switch может немного помочь, но не сильно.
Вот если бы эти циклы if(){} в самом запросе можно было, т.е.
SELECT * FROM таблица WHERE if(num1='1'){num1='$_POST[num1]'}...
Спустя 1 час, 8 минут, 40 секунд (28.02.2010 - 17:50) Beowulf написал(а):
Попробуйте сгруппировать чекбоксы
А в коде прописать
<input type="checkbox" name="conditions" value="num1" />
А в коде прописать
$query = 'SELECT * FROM `table` WHERE 1 ';
if (!empty($_POST['conditions'])) {
foreach ($_POST['conditions'] as $item) {
$query .= ' AND `'.$item.'`=1';
}
}