簡體   English   中英

PHP Mysqli查詢將字符串類型數字字段與整數進行比較

[英]PHP Mysqli query comparing string-type number field to an integer

我有一個數據庫,其中一個字段用於bathrooms ,用戶通常輸入13或有時輸入1.1 ,這意味着1個完整洗手間和1個半洗手間,因此我無法將該字段存儲為數字,整數或雙精度數或十進制數。 我不得不將它們存儲為文本。

我的問題是,如果我只想提取那些洗手間大於3的記錄,該如何處理? 我正在尋找類似的東西:

SELECT * FROM agentdb WHERE converttointeger(bathrooms) => 3

顯然converttointeger是無效的,但是有辦法實現嗎? 我嘗試搜索和谷歌搜索,但是我一直得到錯誤的結果或錯誤的主題。

不要使用轉換為整數的文本。 將值存儲為帶有小數部分的數字,例如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

這應該起作用:SELECT * FROM agentdb WHERE CAST(浴室已簽名)> = 3

我從這里得到了答案: 從VARCHAR轉換為INT-MySQL

將它們存儲為浮點數,以便您可以保留小數,但將其保留為數字。

“浴室”數據= {1,3,{3 <int}}

您只需要3或3個整數即可。 相反地​​想! 您不需要“ 1”數據。 所以...

SELECT * FROM agentdb WHERE bathrooms <> '1'

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM