需要CorCAT sql查询的正确格式。 Codeigniter活动记录

时间:2014-08-10 01:56:28

标签: mysql codeigniter activerecord concat sql-server-group-concat

我正在使用codeigniter的活动记录,但我意识到我可能需要一个常规的SQL查询来解决我想要完成的事情。有人可以看一下这段代码并给我正确的格式。我在这做错了什么?

我认为通过阅读代码我想要完成的事情是显而易见的,但如果您需要的不仅仅是我使用的语法(显然是错误的),我就是&#39 ;我很乐意提供代码解释。

$today = date('Y-m-d H:i:s');

        $where = "type == pk_card AND (end_date > $today OR qty >= 1)";

        $this->db->select('id, title, pk_card_set, pk_card_number');
        $this->db->from('auctions');
        $this->db->where($where);
        $this->db->like("CONCAT(title, ' ', pk_card_number, ' ', pk_card_set)", $keyword);
        $query = $this->db->get();

1 个答案:

答案 0 :(得分:1)

您尝试通过活动记录查询的方式中存在许多错误

  • type == pk_card - > mysql如果你想比较任何值你的列需要单个=符号而不是双倍==正确一个是type = 'pk_card'

  • type == pk_card - >再次,如果您想要将任何字符串值与列进行比较,则需要使用标准单引号将其包装起来'比如type = 'pk_card'

  • end_date> $ today如果你想比较日期,那么你需要在单引号中使用warp日期字符串,例如end_date > '$today'

现在您可以编写您的活动记录查询,如下所示

$today = date('Y-m-d H:i:s');
$keyword='Test';
$where = "(end_date > '$today' OR qty >= 1)";
$this->db->select("id, title, pk_card_set, pk_card_number ");
$this->db->from('auctions');
$this->db->where($where,null,FALSE);
$this->db->where('type','pk_card');
$this->db->like("CONCAT(title, ' ', pk_card_number, ' ', pk_card_set)", $keyword);
$query = $this->db->get();

这将生成类似于

的查询
SELECT 
  `id`,
  `title`,
  `pk_card_set`,
  `pk_card_number` 
FROM
  (`auctions`) 
WHERE (
    end_date > '2014-08-10 12:47:06' 
    OR qty >= 1
  ) 
  AND `type` = 'pk_card' 
  AND CONCAT(
    title,
    ' ',
    pk_card_number,
    ' ',
    pk_card_set
  ) LIKE '%Test%' 

Active Record