【问题标题】:'Greater than or equal' and 'less than or equal' CODEIGNITER“大于或等于”和“小于或等于”CODEIGNITER
【发布时间】:2013-09-02 22:11:15
【问题描述】:

我必须使用 >==< 查询具有 where 条件的东西,但我没有运气。这在 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(); 

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

【问题讨论】:

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

标签: php mysql sql codeigniter


【解决方案1】:

=&lt; 更改为&lt;=

我还在 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 ...

【讨论】:

    【解决方案2】:

    试着把=&lt;改成&lt;=就好了

    ->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:-?
    • @Gautam:回滚然后再次添加相同的内容?为什么?
    • 其实我想建议他使用 or_where 但它可能对他没有用...我已经编辑了 thax。
    • @TobiasKun 这是我的错字。只是我从上面的代码中复制了它。所以我只是更正了自己
    【解决方案3】:

    据我所知,你可以这样写

    $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');
    

    【讨论】:

      【解决方案4】:

      试试:

      $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();
      

      【讨论】:

      • 我很想这样做,但我做不到。我的变量因当前日期而异。
      【解决方案5】:
      $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'");
      

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 2011-12-21
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多