1

私は 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();
4

1 に答える 1

1

アクティブなレコードを介してクエリを実行しようとしている方法で、コードに多くの間違いがあります

  • type == pk_card -> mysql 任意の値を列と比較する場合は、single = sign not double == 正しいものが必要です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

于 2014-08-10T06:50:41.370 に答える