За последние 24 часа нас посетили 17666 программистов и 1699 роботов. Сейчас ищут 1208 программистов ...

Вывод результатов при фильтровании чекбоксами

Тема в разделе "PHP для новичков", создана пользователем Sqaier, 28 фев 2010.

  1. Sqaier

    Sqaier Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте. по-моему, моя проблема должна решаться довольно легко, но что-то найти информацию в интернете не могу.
    Итак, есть таблица в базе данных.
    Например, содержит поля: 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'.

    Если делаю такой запрос для обработчика:
    [sql]SELECT * FROM таблица WHERE num1='$_POST[num1]' AND num2='$_POST[num2]' AND num3='$_POST[num3]' AND num4='$_POST[num4]' AND num5='$_POST[num5][/sql]
    и например, выбираю в форме num2='1' и num4='1', то все остальные столбцы так как не поставлены галочки, не передают переменные и считается, что num1='0', num3='0',...
    а нужно чтобы вытаскивало, где num2='1' и num4='1', а остальные ячейки - неважно будет ли там 1 или 0.


    Конечно можно сделать чтобы шла проверка:
    если только num1=1, то запрос только с ним
    если только num2=1, то запрос только с ним
    если num1=1 num3=1, то в запросе ...WHERE num1='$_POST[num1]' AND num3='$_POST[num3]'"
    Но в данном случае нужно этих циклов if(){запрос} - 15 штук. а если этих свойств 10-15 штук, тогда вообще длинный код. Switch может немного помочь, но не сильно.

    Вот если бы эти циклы if(){} в самом запросе можно было, т.е.
    [sql]
    SELECT * FROM таблица WHERE if(num1='1'){num1='$_POST[num1]'}...[/sql]
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Вопрос на засыпку: зачем столько лишних полей в БД?
    Разве недостаточно одного поля?
     
  3. Sqaier

    Sqaier Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    6
    Симпатии:
    0
    в каждом поле 1 или 0 - т. е. есть ли данное свойство или нет.
    Или предлагаете создать одно поле со значениями через разделитель, например запятую. но по-моему от этого проще фильтры на чекбоксах не станут.
     
  4. Sqaier

    Sqaier Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    6
    Симпатии:
    0
    можно попробывать вытаскивать сначала все строки по очереди в цикле, проверять эначение нужных элементов. Попробую так - вроде по-размеру код небольшой, но по-моему тоже не самое легкое решение.
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    В одном поле можно хранить какое-либо целочисленное значение, которое всегда содержит определенный порядок байт. Значения получаем сдвигом байт из каждого числа поочередно.
    Такой способ ГОРАЗДО легче.