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

Posted

技术标签:

【中文标题】CONCAT sql 查询需要正确的格式。 Codeigniter 活动记录【英文标题】:Need Correct Format for CONCAT sql query. Codeigniter Active Record 【发布时间】:2014-08-10 01:56:28 【问题描述】:

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

我认为通过阅读代码很明显我想要完成的工作,但如果您需要的不仅仅是我使用的语法(显然是错误的),我很乐意提供代码解释。

$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】:

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

type == pk_card -> mysql 如果您想将任何值与您的列进行比较,您需要单 = 符号而不是双精度 == 正确的是 type = 'pk_card'

type == pk_card ->同样,如果您想将任何字符串值与列进行比较,您需要用标准单引号将其括起来,例如 type = 'pk_card'

end_date > $today 如果你想比较日期,那么你需要用单引号括起来的日期字符串,比如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

【讨论】:

感谢您的回答,这将有助于我以后必须使用常规 mysql 查询的所有查询。欣赏它。

以上是关于CONCAT sql 查询需要正确的格式。 Codeigniter 活动记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 count 和 group_concat 编写 SQL 代码

如何在sql server中使用group_concat进行查询[重复]

SQL CONCAT IF 语句?

组合sql查询中列表参数的正确格式

使用 concat() 时 JPA 本机查询返回字节数组而不是字符串

MySQL GROUP_CONCAT 和 ORDER 以及合并列请帮助