2013-01-16 43 views
0

請在數據庫中有一個字段,其中包含text,但可能包含一些integer值。MySQL如何檢查值是整數還是字段中的文本

當我選擇從這個場數據I應該不同,如果是一個整數或文本(只是爲了處理MySQL的操作像<或>),所以我已經試過:

$clause = ""; 
if(is_int($_GET['f'])) 
    $clause = " AND myValue < ".$_GET['f']." "; 
else 
    $clause = " AND myValue = '".$_GET['f']."' "; 

$ds->query("SELECT * FROM myTable WHERE id = 1 ".$clause); 

請注意報價如果它不是一個整數。

但這不起作用,這是正常的,我認爲,因爲該字段有一個類型text

請爲你解決這個問題。提前致謝 !

+8

如果你可以在一個數據庫領域的整數和字符串,你要解釋兩個不同的你已經做了非常錯誤的。這是不是標準化的結構,我推薦重新設計,爲不同的數據創建兩列,並相應地使用它 – ppeterka

+0

非常同意@ppeterka。有一列用於varchar,另一列用於int。 –

+1

該字段的含義是什麼文本和這些整數? –

回答

2

A text類型列始終將其值視爲文本(字符串),因此無論存儲什麼值,都需要將其包含在'中。 MySQL可以將一個數字作爲字符串進行比較。

此外,is_int不適用於檢查$_GET值,因爲它們被視爲字符串。改爲使用is_numeric

但注意您的問題的意見,如果您需要將整數和/或字符串單獨存儲在數據庫中,則重新設計更適合。

+0

我同意非常感謝。 –

1

試試這個:

  $clause = ""; 
     if(is_numeric($_GET['f'])) 
      $clause = " AND myValue < ".$_GET['f']." "; 
     else 
      $clause = " AND myValue = '".$_GET['f']."' "; 

     $ds->query("SELECT * FROM myTable WHERE id = 1 ".$clause); 
0

也許一個解決方案爲您。 例如,Mysql句柄數據類型和運算符有時是隱含的。

SELECT 1+'1'; 
    -> 2 

我正在玩我的數據庫。列a as varchar。然後我從1到5輸入5個值。如果我查詢select * from mytable where a > 2我得到了正確的結果(條目'1'沒有顯示,如果我輸入了一個像「b」這樣的字符的新行,這個字符不在結果中。 或者你可以玩弄明確的類型轉換。

親切的問候

相關問題