1

我的声明如下:

SELECT * FROM users WHERE division >= '0' AND division <= '10' AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

这不会选择除数等于 2 的用户,但是

SELECT * FROM users WHERE division >= '1' AND division <= '9' AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

将选择用户

为什么是这样?感谢您提供任何帮助。

4

2 回答 2

3

您似乎将其存储division为字符串。您可以尝试进行转换并与数字进行比较;

SELECT *
FROM users
WHERE division+0 between 0 and 10 AND voice = '0'
ORDER BY username DESC
LIMIT 0, 10 ;

这种方法的唯一问题是非数字值(比如'A11')也会匹配,因为 MySQL 在加法中会将这样的值视为“0”。

顺便说一句,与字符串的整数比较确实有效,尽管我不建议使用它们。考虑一下:

select  (2 <= '10') as IntToString, ('2' <= '10') as StringToString

返回:

1    0
于 2013-08-29T23:21:05.147 回答
0

如果除法是一个数字,请使用

SELECT * FROM users WHERE division >= 0 AND division <= 10 AND voice = '0' ORDER BY username DESC LIMIT 0, 10 

否则,首先使用Cast Functions将除法转换为数字。

于 2013-08-29T23:17:55.317 回答