簡體   English   中英

查找兩個varchar字段的最大數值

[英]Find Max numeric value of two varchar fields

我正在嘗試查找表的兩個單獨字段中包含的最大值。

我在模型中使用的代碼是:

$query = $this->db->query("select max($field1) as max_id_1 from default_table1");
$row1 = $query->row_array();
$query = $this->db->query("select max($field2) as max_id_2 from default_table1");
$row2 = $query->row_array();
return max($row1['max_id_1'], $row2['max_id_2']);

我是一個涉及PHP和CodeIgniter的完全新手-我確定我的代碼演示了:)

它在返回值的范圍內起作用,但在字段中沒有最大值。 例如,我知道有一個4000值,但返回的最高值是750。

我想知道這是否是因為字段的類型為VARCHAR,因為盡管它們主要包含數字,但有些包含字符(-或&)或單詞“ to”,所以我不能使用INT類型。 由於使用VARCHAR,是否無法看到4000大於750?

如果是這樣,有沒有一種方法可以在檢查最大值之前將字段內容轉換為整數,這會受到字段中非整數值的影響嗎?

我們非常感謝您提供的所有幫助和建議。

托尼

這可以通過使用MySQL的隱式類型轉換使用SQL來完成:

select max(case when (field1+0)>(field2+0) then field1+0 else field2+0 end)
from default_table1

使用+0會將varchar轉換為數字,並且也忽略數字后面的任何字符。 如果仍然需要原始內容,則可以這樣編寫查詢:

select case when (field1+0)>(field2+0) then field1 else field2 end
from default_table1
order by case when (field1+0)>(field2+0) then field1+0 else field2+0 end desc
limit 1

哦,糟糕,我忘記了mysql部分您應該做同樣的事情,將其轉換為整數:

select max(cast($field1 to unsigned)) as max_id_1 from default_table1

這取決於您的數據,但是您可以嘗試類似的方法

return max((int)$row1['max_id_1'], (int)$row2['max_id_2']);

看一下字符串轉換為int的PHP文檔

您真正想要的是讓Codeigniter將字符串轉換為數字的方法,並找出這些數字的最大值。 我不知道在Codeigniter中有什么方法可以做到這一點。

如果您確實要這樣做,則有兩個選擇:

  1. 循環遍歷表中的所有行,並使用php解析數字,同時查找最大數字
  2. 在數據庫中添加一個數字列,並在插入值時在此新列中進行字符串到數字的解析。

第一個選項是非常低效的,第二個可能是你最好的選擇。

暫無
暫無

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

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