大于或等于和小于或等于 CODEIGNITER

18

我需要查询一些带有>==<条件的内容,但是一直没有运气。这是在CODEIGNITER中。

以下是在MySQL查询中的自然方式:

SELECT COUNT(payment.keyid) AS rec_count, `product_key`.`client_name`, 
`product_key`.`contact_email`, `product_key`.`status`, `product_key`.`id`, 
`payment`.`paymentdate`, (payment.id) as pid, `payment`.`subscription_type` 
FROM (`product_key`) 
LEFT OUTER JOIN `payment` ON `payment`.`keyid`=`product_key`.`id` 
WHERE `payment`.`paymentdate` >= '2013-08-01' 
    AND `payment`.`paymentdate` =< '2013-08-31' 
    AND `status` = 'purchased' 
GROUP BY `product_key`.`id` 
ORDER BY `client_name` asc

这是我拥有的:

    return $this->db
    ->select('COUNT(payment.keyid) AS rec_count')
    ->select('product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid,payment.subscription_type')
    ->from('product_key')          
    ->where('payment.paymentdate >=', $month_start)
    ->where('payment.paymentdate =<', $month_end)
    ->where('status', 'purchased')
    ->join('payment', 'payment.keyid=product_key.id', 'left outer')
    ->order_by('client_name', "asc")
    ->group_by('product_key.id')
    ->get()
    ->result(); 

也许有人能在这方面帮助我。谢谢。


你尝试使用过between吗? - Ashutosh Arya
或者尝试将硬编码的日期显式转换为日期。 - Ashutosh Arya
@ashutosh-arya 我以前从未在任何查询中使用过between。尤其是现在我正在使用codeigniter作为我的框架。但我现在会搜索如何使用它。谢谢你的建议。 - elimariaaa
1
@AshutoshArya:BETWEEN 只是语法糖,但也许 DATE_FORMAT 会有所帮助。 - Elias Van Ootegem
5个回答

15

=<更改为<=

我还在phpmyadmin中测试了您当前的查询,因为我无法相信它不会出错。但我的确会报错。因此,在phpmyadmin中您的查询应该无法工作。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=< ...' at line ...

14
尝试将 =< 改为 <=,如下所示:
->where('payment.paymentdate >=', $month_start)
->where('payment.paymentdate <=', $month_end)

而且更好,但在where条件之前加入表格并不是必须的。现在您的查询应该像这样:

->select('COUNT(payment.keyid) AS rec_count')
->select('product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid,payment.subscription_type')
->from('product_key')         
->join('payment', 'payment.keyid=product_key.id', 'left outer')    
->where('payment.paymentdate >=', $month_start)
->where('payment.paymentdate <=', $month_end)
->where('status', 'purchased')
->order_by('client_name', "asc")
->group_by('product_key.id')
->get()

原始的SQL语句中不包含任何OR :-? - Álvaro González
@Gautam:回滚再添加相同的内容?为什么? - Tobias Golbs
实际上,我想建议他使用or_where,但这对他可能没有用...我已经编辑了thax。 - GautamD31
@TobiasKun 这是我的笔误。我只是从上面的代码中复制过来,所以我纠正了自己。 - GautamD31

1
从我所知道的,你可以像这样编写它们。
$this->db->select('COUNT(payment.keyid) AS rec_count, product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid, payment.subscription_type', false);
$this->db->where('payment.paymentdate >= "2013-08-01"');
$this->db->where('payment.paymentdate <= "2013-08-31"');
$this->db->where('status', 'purchased');
$this->db->group_by('product_key.id');
$this->db->order_by('client_name', 'asc');
$this->db->join('payment', 'payment.keyid=product_key.id', 'LEFT OUTER')
$this->db->get('product_key');

1

尝试:

$this->db
->select('COUNT(payment.keyid) AS rec_count, product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid, payment.subscription_type', false)
->from('product_key')
->join('payment', 'payment.keyid=product_key.id', 'LEFT OUTER')
->where('payment.paymentdate >=', '2013-08-01')
->where('payment.paymentdate <=', '2013-08-31')
->where('status', 'purchased')
->group_by('product_key.id')
->order_by('client_name', 'asc')
->get();

尽管我很想这样做,但我不能。我的变量取决于当前日期。 - elimariaaa

0
$this->db->where("DATE_FORMAT(ph_payment_date, '%d-%m-%Y') BETWEEN '$startdate' AND '$enddate'");
$this->db->where("DATE_FORMAT(ph_payment_date, '%d-%m-%Y') >= '$startdate'");
$this->db->where("DATE_FORMAT(ph_payment_date, '%d-%m-%Y') <= '$enddate'");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接