Pergunta

Feno a todos, eu tenho uma consulta mysql

SELECT * FROM `product` WHERE `price` BETWEEN '60' AND '999' ORDER BY `product` DESC LIMIT 12 OFFSET 0

Obviamente, selecione 12 produtos em que o preço está entre 60 e 999. Isso mostra as linhas corretamente.

No entanto, se eu aumentar o limite como esta consulta

SELECT * FROM `product` WHERE `price` BETWEEN '60' AND '1000' ORDER BY `product` DESC LIMIT 12 OFFSET 0

Nenhuma linha é mostrada. Alguma idéia de por que isso acontece? O campo de 'preço' é o campo do tipo float

Foi útil?

Solução

Remova o 'porque os tipos de campo são números, não chars.

Outras dicas

Você está tratando '60' e '1000' como personagens. Use números:

where `price` between 60 and 1000

Se você usa strings de varchar, existe Sem linha isso vai corresponder a um between'60' e '1000'condition, since'1000'is smaller than'60' em Varchars.

Estava trabalhando com '999' Porque provavelmente existem alguns preços variados entre '6' e '9'.

mysql> select '60' < '9';
+------------+
| '60' < '9' |
+------------+
|          1 | 
+------------+
1 row in set (0.00 sec)

Os 60, 999 e 1000 estão sendo tratados como chars em vez de flutuar ou int,

A razão pela qual ele funciona com o 999 é porque a comparação acontece nos chars ASCII.

Para 1000, você não receberá linhas que terão preço com ASCII começando entre 6 e 1, pois 6 tem um valor mais alto que 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top