Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql将返回0行_Php_Mysql_Between - Fatal编程技术网

Php mysql将返回0行

Php mysql将返回0行,php,mysql,between,Php,Mysql,Between,我有一个价格结构如下的MySQL表: -------------------- | Price | item_id | -------------------- |$10,999| 123 | |$5,889 | 321 | |$2999 | 143 | |------------------| 现在如果我质疑这个问题: SELECT * FROM products WHERE price BETWEEN "$2999" AND "$6000"; SEL

我有一个价格结构如下的MySQL表:

-------------------- 
| Price | item_id  |
--------------------
|$10,999|  123     |
|$5,889 |  321     |
|$2999  |  143     | 
|------------------|
现在如果我质疑这个问题:

SELECT * FROM products WHERE price BETWEEN "$2999" AND "$6000";
SELECT * FROM products WHERE price BETWEEN "$2999" AND "$20000";
它将返回两行。但如果我质疑这一点:

SELECT * FROM products WHERE price BETWEEN "$2999" AND "$6000";
SELECT * FROM products WHERE price BETWEEN "$2999" AND "$20000";
它不会返回任何行,因为它至少要返回3行

请注意,还有许多其他行是11000美元,以此类推


任何帮助都将不胜感激

您应该将其存储为string或varchar。它现在执行的方式是比较字符串,这就是为什么没有结果。如果我是您,我将通过将列
Price
更改为
INT
DECIMAL
,或任何只要是数字的内容来重新构造表

但要直接回答您的问题,您可以这样做,但如果您已经定义了索引,则不使用任何索引

WHERE CAST(REPLACE(REPLACE(price,'$',''),',','') AS SIGNED) 
      BETWEEN 2999 AND 20000

我认为Price是一个文本字段,而不是一个数字字段。因此,当您尝试获取$2999和$20000之间的行时,不会返回任何内容,因为实际上20000比2999小(作为字符串比较)


您必须将该列转换为带有两个小数点的十进制数据类型。

似乎将价格存储为字符串而不是数字。“$2999”和“$20000”之间没有任何内容,因为“$2999”>按字母顺序排列的“$20000”

以下是解决此问题的一种方法:

SELECT 
FROM products
WHERE cast(replace(replace(price, '$', ''), ',') as signed) BETWEEN 2999 AND 20000;

更好的方法是将“价格”存储为数字而不是字符。

删除
$
,只保留数字。您不需要在DB中保存带数字的美元符号

从价格>2999且价格<6000的产品中选择*

从价格>2999且价格<20000的产品中选择*

从价格介于2999和6000之间的产品中选择*;


从价格介于2999和20000之间的产品中选择*

mysql
中,您应该使用
SIGNED
UNSIGNED
,否则它将抛出一个错误。@491243。非常感谢。我知道。每次在MySQL中需要一个整数字段时,我都会很方便地忘记它。这仍然会返回0行吗?但我使用了CAST(替换(替换…);它是有效的,但性能和响应确实很慢。你是说比较20000和2999,20000更小?比如20000<2999?是的,当你将它们作为字符串进行比较时。这非常有效!向上投票,但您能解释一下它是否会影响页面的性能吗?@Ahsan您必须将该列转换为十进制类型并向其添加索引,因为您将使用该列运行许多查询,以获得最佳性能。谢谢您,这样做了,获得了最佳性能!