PHP Mysqli查询将字符串类型数字字段与整数进行比较

时间:2016-07-04 02:38:27

标签: php mysql

我有一个数据库,其中一个字段用于int* buf[20];//type of element is int* ,用户通常输入bathrooms1或有时3,这意味着1个完整的浴室和1个半浴室所以我无法将此字段存储为数字,整数或双精度或小数。我不得不将它们存储为文本。

我的问题是,如果我只想提取那些浴室大于3的记录,我该如何在查询中执行此操作?我正在寻找类似的东西:

1.1

显然SELECT * FROM agentdb WHERE converttointeger(bathrooms) => 3 无效,但有没有办法实现这一目标?我尝试搜索和谷歌搜索,但我一直得到错误的结果或错误的主题。

4 个答案:

答案 0 :(得分:1)

不要使用转换为整数的文本。将值存储为带有小数部分的数字,例如decimal。然后,您可以使用>比较,而无需进行投射。

我会使用DECIMAL(2,1),意思是2位数字,包括1位十进制数字。 " 1.1"将保存为1.1,而不是1.10

备选方案:您还可以有两个表格字段:full_bathshalf_baths,每个字段都为tinyintsmallint。当您的用户输入" 1.1"在存储之前将其拆分

$baths = $_POST['bathrooms'];// eg: "2.1"
$baths_arr = explode(".",$baths); // eg: [2,1]

$full = $half = 0; //full baths, half baths
if(!empty($baths_arr)):
    $full = (int)$baths_arr[0]; //we explicitly convert to integer
    $half = empty($baths_arr[1])? 0: (int)$baths_arr[1];
endif;

然后,您可以将$full$half保存在各自的列中

答案 1 :(得分:1)

这应该有效: SELECT * FROM agentdb WHERE CAST(浴室已签名)> = 3

我从这里得到了答案: Cast from VARCHAR to INT - MySQL

答案 2 :(得分:0)

将它们存储为浮点数,以便您可以使用小数,但将它们保留为数字。

答案 3 :(得分:0)

'浴室'数据= {1,3,{3< INT}}

整数只需3或3。 反过来想想! 您不需要'1'数据。 所以......

SELECT * FROM agentdb WHERE bathrooms <> '1'

并且,Casted columnn不是工作索引。