За последние 24 часа нас посетили 21952 программиста и 1334 робота. Сейчас ищут 366 программистов ...

Как правильно составить SQL запрос с использованием команды BETWEEN и реализовать его с PDO PHP подг

Тема в разделе "PHP и базы данных", создана пользователем primitiv, 3 дек 2021.

Метки:
  1. primitiv

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

    С нами с:
    22 ноя 2018
    Сообщения:
    40
    Симпатии:
    0
    Как правильно составить SQL запрос с использованием команды BETWEEN и реализовать его с помощью PDO PHP подготовленными запросам

    Питаюсь реализовать фильтр товаров по цене, имеются две переменные которые я использую как минимум и максимум того промежутка цен который нужно извлечь с БД, ниже представляю пример того чего я навоял

    PHP:
    1. $db_act = $connect_db->PREPARE("SELECT * FROM `table_product` WHERE `price` BETWEEN ? AND ?");
    2. $db_act->EXECUTE(array($this -> FROM, $this -> up));              
    3. $array_product = $db_act->fetchAll(PDO::FETCH_ASSOC);
    Проблема заключается в том что, запрос работает как то не полностью, если установить минимум 100 рублей, а максимум 100000 рублей, то вернуться соответствующие результаты, однако работает это с определёнными промежутками, например если я изменю минимум и поставлю 30 рублей место 100 то результата не будет вообще никакого, казалось бы, промежуток стал больше, но запрос возвращает 0 строк, я даже не могу понять какого рода это ошибка

    Мой вопрос: как правильно реализовать такой SQL запрос, должен быть именно подготовленный запрос

    Опишу свою БД, MySQL, в таблице 41 кортеж (знаю это не правильно, ну мне и не нужно правильно, нужно чтобы работало), поле price -> vchar(10), в этом поле только цифры без пробелов и других способов форматирования
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.592
    Симпатии:
    360
    @primitiv, цена хранится в строке. Строки сравниваются не так, как числа.
    Если цена в базу пишется с точностью до копеек в виде целого числа (например, 1р 25к записан 125) или в рублях без копеек - преобразуйте поле `price` в INT
    Если нужны рубли и копейки - есть вариант с типом decimal.
    Если уж совсем ничего менять не хочется, можно применить функцию cast к полю `price`, чтобы получить целое число, которое будет проверяться на принадлежность интервалу.
     
    Slava Rozhnev нравится это.