2015-08-26 3 views
0

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

SELECT * 
FROM product_product 
WHERE (`region` = 'Balearen' OR `region` = 'Ibiza' OR `city`='Ibiza') AND `price` BETWEEN '100' AND '1500' AND `published`='1' 
ORDER BY RAND() 
LIMIT 1000 

Это дает мне только два результата, и когда я выбираю между 100 и 999, я получаю правильные результаты.

Это дает мне правильные результаты:

SELECT * 
FROM product_product 
WHERE (`region` = 'Balearen' OR `region` = 'Ibiza' OR `city`='Ibiza') 
    AND `price` BETWEEN '100' AND '999' AND `published`='1' ORDER BY RAND() limit 1000 

Цены сохраняются, как это "102.00".

Так что мой вопрос в том, почему эта статья действует так? Я делаю что-то неправильно?

Спасибо за помощь.

+1

Сохраняется ли он как строка? –

+1

Если ваши поля сохранены как строка, это нормально, вы должны использовать его как int для использования. Между должным образом – Bdloul

+0

Спасибо. Да, цена/хранилась как varchar. Я должен положить это в DECIMAL (2,2)? –

ответ

2

Вы преобразовываете значения в строку, поэтому вы получаете результат wron. удалите одиночные кавычки из значений:

SELECT * 
FROM product_product 
WHERE (`region` = 'Balearen' OR `region` = 'Ibiza' OR `city`='Ibiza') 
    AND `price` BETWEEN 100 AND 1500 AND `published`='1' ORDER BY RAND() limit 1000 
+0

right @GreenBlueRup вам не нужны числовые значения в цитатах, потому что они интерпретируются как строка – userDEV

+0

Спасибо за ваш ответ, это исправило это для меня, и теперь я понимаю, почему. –

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