我正在尝试查找表格中两个单独字段中包含的最大值。
我在我的模型中使用的代码是:
$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?
如果有,有办法在检查最大值之前将字段内容强制转换为整数,并且这会受到字段中非整数值的影响吗?
感谢所有的帮助和建议。
贝。
答案 0 :(得分:1)
这可以使用SQL使用MySQL的隐式类型转换来完成:
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
答案 1 :(得分:0)
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']);
上的PHP文档
答案 2 :(得分:-1)
你真正要求的是codeigniter将字符串转换为数字的方法,并找到它们的最大值。我不知道在codeigniter中有什么方法可以做到这一点。
如果你真的想要这个,你有两个选择:
第一个选项令人难以置信效率低下,第二个选项可能是你最好的选择。