Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 3
1

Выборка из базы по

20.11.2015, 02:31. Показов 394. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Имеется следующая форма:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="test1.php" method="post">
    <div>Укажите тип позиции</div>
    <select name="item_type[]" size="7" multiple>
        <?php $select = pg_query($dbconn, "SELECT id, name FROM items_type WHERE deleted = 0");
        while ($option =pg_fetch_assoc($select)) :?>
        <option value="<?php echo $option['id'];?>"><?php echo $option['name'];?></option>
        <?php endwhile;?>
        </select>
    <div>Укажите призводителя</div>
    <select name="manufacturer[]" size="7" multiple>
        <?php $select = pg_query($dbconn, "SELECT id, name FROM manufacturer WHERE deleted = 0");
        while ($option =pg_fetch_assoc($select)) :?>
        <option value="<?php echo $option['id'];?>"><?php echo $option['name'];?></option>
        <?php endwhile; ?>
    </select>
    <input type="submit" value="ГО!">
</form>
В форме - 2 поля select multiple с выбором типа товара и производителя.
Нужно делать выборку товаров из базы по любой комбинации выбранных фильтров, в том числе если в каком-либо поле не выбрано ничего.
Пока получился вот такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (!empty($_POST)) :
$where = 'WHERE ';
if (isset($_POST['item_type'])) {
$type = implode(",",$_POST['item_type']);
$where .= "id_type IN ($type) ";
}
if (isset($_POST['manufacturer'])) {
$manufacturer = implode(",",$_POST['manufacturer']);
$where .= "manufacturer_id IN ($manufacturer) ";
}
echo $where.'<br/>';
echo '<br/>';
$items = pg_query($dbconn, "SELECT id, name FROM stock_item $where");
$items = pg_fetch_all($items);
print_r($items);
Но данный код работает только если выбраны значения из какого-то одного поля (либо производитель либо тип товара). Если выбираю в обоих полях - в запросе не хватает оператора AND.
Подскажите пожалуйста путь обхода!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2015, 02:31
Ответы с готовыми решениями:

Выборка из базы
Сильно не углублялся В php работу с базами а видимо стояло. Нужно решить такую задачу У нас...

Выборка из базы
id='{$user}' and email LIKE '%{$text}%' OR name LIKE '%{$text}%' OR email LIKE '%{$text}%' Что...

Выборка из базы
Пишу что-то вроде тестирования для студентов. Студент заходит на главную страницу и указывает свои...

Выборка из базы
мне необходимо выбрать из базы 1min, таблицы а03 строку b46 , за 2016 год полностью за год сколько...

4
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
20.11.2015, 11:17 2
Ну если продолжать так извращаться, то и добавить еще один блок
PHP
1
if ((isset($_POST['item_type'])) && (isset($_POST['manufacturer'])))
и добавляйте нужный $where
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 3
20.11.2015, 11:48  [ТС] 3
Цитата Сообщение от СлаваВирус Посмотреть сообщение
if ((isset($_POST['item_type'])) && (isset($_POST['manufacturer'])))
Думал об этом...
Проблема в том, что таких полей в форме будет больше и они могут со временем добавляться. Соответственно при таком подходе с каждым новым параметром скрипт будет расти в геометрической прогрессии...
Хотелось бы найти более изящное решение...
Пока в голову только приходит обрабатывать переменную $where после задания всех условий с помощью регулярки - чтобы расставить все нужные AND...
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
20.11.2015, 11:53 4
значит брать массив $_POST, вычислять количество ячеек функцией count($_POST) и дальше развивать логику построения выражений
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 3
20.11.2015, 12:38  [ТС] 5
Вобчем решение как обычно оказалось на поверхности....))
Теперь код выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function addWhere($where, $add, $and = true) {
    if ($where) {
      if ($and) $where .= " AND $add";
      else $where .= " OR $add";
    }
    else $where = $add;
    return $where;
}
if (!empty($_POST)) :
$where = "";
if (isset($_POST['item_type'])) $where = addWhere($where, "id_type IN (".htmlspecialchars(implode(",", $_POST["item_type"])).")");
if (isset($_POST['manufacturer'])) $where = addWhere($where, "manufacturer_id IN (".htmlspecialchars(implode(",", $_POST["manufacturer"])).")", false);
$sql = "SELECT id, name FROM stock_item";
if ($where) $sql .= " WHERE $where";
$items = pg_query($dbconn, $sql);
$items = pg_fetch_all($items);
print_r($items);
0
20.11.2015, 12:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2015, 12:38
Помогаю со студенческими работами здесь

Выборка из базы
Я сделал так,чтобы пользователю зашедшему под своим логином выводилась нужная для него информация...

Выборка из базы
Нужна помощь выборке из бд данных за определенный промежуток дат, в формате ...от и до...

Выборка из базы и запись!
Есть такая таблица где изображения хранятся.там поле default_img где указано изображение по...

Выборка из базы данных
При выборке из базы данных данной функцией. public function getAll($table_name, $order, $up) {...

Выборка с базы данных
Доброго времени суток! Хочу попросить помощи. Вот я столкнулся с такой проблемой, с которой до сих...

Выборка из базы данных
здравствуйте!!! Помогите разобраться с проблемой выборки из базы данных... &lt;? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru