MySQL ... ценовой диапазон в пределах ценового диапазона?
Вопрос
Я разрабатываю сценарий недвижимости. Сценарий имеет опцию поиска, где пользователь может указать диапазон цен, например. user_price_low to user_price_high и списки должны быть извлечены из базы данных, которая имеет например. db_price_high и db_price_low.
Я использовал оператор между попыткой найти совпадения,
WHERE price_low BETWEEN '.$_REQUEST['minprice_buy'].' AND '.$_REQUEST['maxprice_buy']
Но, к моему удивлению ...
Если пользователь имеет user_price_high = 60 и user_price_low = 20, а запись имеет db_price_low = 30 и db_price_high = 120
Мой запрос недействителен в этом случае.
Я пытался посмотреть на Mysql Query-Date Lange в диапазоне дат Но соответствует ли это тому, что я хочу?
Решение
Чандан, никогда не вводим $ _* функционирует непосредственно в запрос. Это отверстие для инъекции SQL.
Измените код на:
$min_price = mysql_real_escape_string($_REQUEST['minprice_buy']);
$max_price = mysql_real_escape_string($_REQUEST['maxprice_buy']);
$query = "SELECT whatever
FROM whichever
WHERE price_low BETWEEN '$min_price' AND '$max_price' ";
// Dont forget these quotes ^ ^ ^ ^
// Or mysql_real_escape_string() will not work!.
Что касается вашего вопроса, измените запрос на что -то вроде:
WHERE '$min_price' BETWEEN price_low AND price_high
AND '$max_price' BETWEEN price_low AND price_high
Вы также можете рассмотреть:
WHERE ('$min_price' BETWEEN price_low AND price_high)
OR ('$max_price' BETWEEN price_low AND price_high)
Здесь min_price
а также max_price
Не нужно всегда быть в диапазоне.
Другие советы
Если вы хотите проверить, есть ли у диапазонов какие -либо общие моменты, которые вы должны использовать
WHERE greatest(price_low,user_price_low)<=least(price_high,user_price_high)
Если вы хотите проверить, находится ли пользовательский диапазон во всех диапазоне, вы можете использовать
Неопределенное поведение для user_preice_low>user_price_high
WHERE user_price_low>=price_low && user_price_high<=price_high
Так что, как я понимаю, не должно быть
WHERE price_low >= '.$_REQUEST['minprice_buy'].' AND price_high <='.$_REQUEST['maxprice_buy']'
Проверить свой ввод, используя mysql_real_escape_string();
Прежде чем использовать их в запросе, не используйте $ _get, $ _request, $ _post переменные непосредственно в любом запросе.