Sql 如何计算CodeIgniter中某一年的日期行数?
我有以下疑问Sql 如何计算CodeIgniter中某一年的日期行数?,sql,codeigniter,Sql,Codeigniter,我有以下疑问 $query = $this->db->query('SELECT COUNT(*) FROM iplog.persons WHERE begin_date LIKE '2014%''); 我需要计算2014年开始日期为的列数 运行此脚本时,我收到一个错误: 分析错误:语法错误,第12行C:\xampp\htdocs\iPlog2\application\controllers\stat.php中出现意外的“2014”(T_LNUMBER) 我试图将我的CI脚本更改为
$query = $this->db->query('SELECT COUNT(*) FROM iplog.persons WHERE begin_date LIKE '2014%'');
我需要计算2014年开始日期为的列数
运行此脚本时,我收到一个错误:
分析错误:语法错误,第12行C:\xampp\htdocs\iPlog2\application\controllers\stat.php中出现意外的“2014”(T_LNUMBER)
我试图将我的CI脚本更改为
$query = $this->db->query('SELECT COUNT(*) FROM iplog.persons WHERE begin_date LIKE "2014%"');
但它导致了一个错误。替换如下引号:
$query = $this->db->query("SELECT COUNT(*) FROM iplog.persons WHERE begin_date LIKE '2014%'");
对整个查询进行双引号,然后简单地引用您喜欢的条件。您的意思是,计算行数:
因此,只需根据一个条件计算您拥有的行数:
$year = '2014'
$this->db->from('iplog');
$this->db->like('begin_date', $year);
$query = $this->db->get();
$rowcount = $query->num_rows();
首先,关于单引号的使用,您有一个简单的输入错误。您的完整sql字符串应该是双引号,以便您的值引号可以是单引号 其次,您使用了不适当的查询逻辑。当您想对日期或日期时间类型列进行比较时,决不能像使用那样使用
。有专门用于处理这些类型的特定MYSQL函数。在您的情况下,应该使用YEAR()
来隔离begin\u date
值的YEAR组件
资源:
您可以这样编写原始查询:(COUNT(*)
和COUNT(1)
是等效的)
或者,如果您希望使用Codeigniter方法来构建查询:
$count = $this->db
->where("YEAR(begin_date) = 2014")
->count_all_results("persons");
您可以返回所有符合条件的行中的所有值,但这意味着向数据库询问您无意使用的值——这不是最佳做法我不推荐以下内容:
$count = $this->db
->get_where('persons', 'YEAR(begin_date) = 2014')
->num_rows();
因此,当您无意使用结果集中的值时,不应生成一个完全填充的结果集,然后调用num_rows()
或count()
$count = $this->db
->get_where('persons', 'YEAR(begin_date) = 2014')
->num_rows();