2012-05-13 2 views
0

У меня есть код, который ищет для автомобилей в зависимости от вашего ценового диапазона:Поиск цен в базе данных PHP MySQL

$category = "SELECT * FROM tbl_listings WHERE price between '$c[0]' AND '$c[1]'"; 

По какой-то причине, что код не работает отлично. Он показал мне пару автомобилей в правильном диапазоне, но также показал тот, который составляет 200 000, когда я искал между 5000 и 20 000.

Кроме того, что является хорошим способом поиска, когда некоторые автомобили имеют цену со знаком доллара в базе данных, а некоторые - запятыми? Форма поиска не возвращает ничего со знаком доллара или запятыми.

+1

цена со знаком доллара ?? запятые? это означает, что вы не используете числовой тип данных? это может быть проблемой – ShinTakezou

ответ

1

Прекратить хранить цены как строки? Ценовой обычно хранятся в качестве одного из двух типов:

  • целое: количество центов
  • поплавка: долларов и центы, но будьте уверены, чтобы установить количество знаков после запятой 2

One обычно не хранит цены в виде строк (например, «14,999,99») в базе данных, потому что вы не можете выполнять запросы диапазона, например, тот, который вы пытаетесь сделать сейчас.

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

Если данные, которые вы вытаскиваете, имеют форматированные строки, подобные этому, используйте NumberFormatter :: parseCurrency(), чтобы получить поплавок из строки, которую вы указали, прежде чем вставлять ее в БД. http://php.net/manual/en/numberformatter.parsecurrency.php

+0

Это имеет смысл. Я даже не помню, почему я использовал сильный при создании базы данных. Может ли ints хранить знаки доллара или мне нужно удалить их при изменении строки на int? – user1385895

+0

@ user1385895 Вы не храните символ валюты в цене, но добавляете символ валюты только при отображении цены –

+0

Вам нужно будет удалить их. Я бы использовал класс NumberFormatter в любом случае, так как он может обрабатывать $ часть. Просто передайте результат в int, если вам не нужна десятичная часть: (int) price = NumberFormatter.parseCurrency (stringPrice); –

0

Ваше заявление о

некоторые автомобили имеют цену со знаком доллара в базе данных и некоторые запятые

заставляет меня думать, что тип данных в базе данных не числовой тип данных. Это может быть проблемой, даже если ваш $c[0] правильно нижняя граница, а $c[1] - верхняя граница.

Смежные вопросы