[Codeigniter-users] SQLクエリの生成について

Back to archive index

decoy youtu****@gmail*****
2008年 7月 9日 (水) 23:09:30 JST


decoyです。

kunitsujiさん、こんばんは。

> たぶんですがarray()
> で渡す場合、キーと値、という組み合わせですから、
> DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y-%m-%d %H:%i:%s')
> これが値として判断されているために文字列処理されているんでしょうね。

でしょうね。

> 自分自身は、アクティブレコードを使わず、SQLでDB操作してしまうので、あまり気にならないんですよね。。^^;

なるほど。^^;

ちなみに(このメーリングリストを見ている)他の方はこういう関数を利用した
演算子での比較はどういうふうにされてますか?

// decoy

----- Original Message ----- 
From: "tsujioka" <tsuji****@m-s*****>
To: <codei****@lists*****>
Sent: Wednesday, July 09, 2008 12:14 AM
Subject: Re: [Codeigniter-users]SQLクエリの生成について


> decoyさん、こんばんは。
>
> たぶんですがarray()
> で渡す場合、キーと値、という組み合わせですから、
> DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y-%m-%d %H:%i:%s')
> これが値として判断されているために文字列処理されているんでしょうね。
>
> もしなんとかするのであれば、
> 式として評価させる、または関数として評価させる方法をとるしかないのでしょう。 
> 
> あらかじめ変数に入れておいて、ひとつの評価式としてWHEREしたらいけるということは、たぶんそうかと思います。
> 式を式として渡す方法は引数を与えてとかでできそうですがね。
>
> 自分自身は、アクティブレコードを使わず、SQLでDB操作してしまうので、あまり気にならないんですよね。。^^;
>
> どうせ使うなら、テーブルオブジェクトとしてプロパティをカラムとするほうがいいかなとか。
>
> ただ、パフォーマンスがね^^;
>
>
>> decoyです。
>>
>> kunitsujiさん、こんばんは。
>>
>>> $this->db->where("start_day <= DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y-%m-%d
>>> %H:%i:%s')");
>>> $this->db->where("end_day >= DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y-%m-%d
>>> %H:%i:%s')");
>>> $this->db->get("c_access_log");
>>>
>>> これでいけますね。
>>
>> 上記、了解です。
>> やっぱりベタ書きに近い形になってしまうようですね。
>>
>> // decoy
>>
>> ----- Original Message ----- 
>> From: "kunitsuji" <tsuji****@m-s*****>
>> To: "decoy" <youtu****@gmail*****>;
>> <codei****@lists*****>
>> Sent: Tuesday, July 08, 2008 12:41 AM
>> Subject: Re: [Codeigniter-users] SQLクエリの生成について
>>
>>
>>>  kunitsujiです。
>>>
>>> $this->db->where("start_day <= DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y-%m-%d
>>> %H:%i:%s')");
>>>        $this->db->where("end_day >= DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y
>>> -%m-%d %H:%i:%s')");
>>>        $this->db->get("c_access_log");
>>>
>>> これでいけますね。
>>> 生成されたSQLは
>>> 0.0000   SELECT * FROM (`c_access_log`) WHERE `start_day` <= DATE_FORMAT
>>> (CURRENT_TIMESTAMP(),'%Y-%m-%d %H:%i:%s') AND `end_day` >= DATE_FORMAT
>>> (CURRENT_TIMESTAMP(),'%Y-%m-%d %H:%i:%s')
>>> です。
>>>
>>>>decoyです。
>>>>
>>>>kunitsujiさん、こんばんは。
>>>>いつもいろいろとありがとうございます。
>>>>
>>>>> '%Y-%m-%d %H:%i:%s'が¥がついてしまうということですよね?
>>>>
>>>>%Y-%m-%d %H:%i:%sの前後の'に\がついてしまう事と
>>>>DATE_FORMAT()の前後に'がついてしまいますね。
>>>>
>>>>
>>>>> $start_day = "start_day <= DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d
>>>>> %H:%i:%s')";
>>>>> $this->db->where($start_day);
>>>>> $query = $this->db->get('c_access_log_id');
>>>>
>>>>やっぱり上記のような書き方にするしかないんでしょうかね?
>>>>仮にそうならNOW()等の関数を利用した演算子での比較は
>>>>CIのActive Recordクラスでは不可能というところでしょうか?
>>>>
>>>>// decoy
>>>>
>>>>----- Original Message ----- 
>>>>From: "kunitsuji" <tsuji****@m-s*****>
>>>>To: <codei****@lists*****>
>>>>Sent: Monday, July 07, 2008 11:45 AM
>>>>Subject: Re: [Codeigniter-users]SQLクエリの生成について
>>>>
>>>>
>>>>>  kunitsujiです。
>>>>>
>>>>> こんな感じで。OKですね。
>>>>>
>>>>> $start_day = "start_day <= DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d 
>>>>> %
>>>>> H:%i:%s')";
>>>>> $this->db->where($start_day);
>>>>> $query = $this->db->get('c_access_log_id');
>>>>>
>>>>>
>>>>>>
>>>>>>decoyさん、こんにちは。
>>>>>>自分active recorクラスを使わないので何とも言えませんが、
>>>>>>'%Y-%m-%d %H:%i:%s'が¥がついてしまうということですよね?
>>>>>>
>>>>>>$ymdstr = '%Y-%m-%d %H:%i:%s'
>>>>>>として
>>>>>>? で渡すのはむりですかね?w
>>>>>>やってみてませんが。。。。これからやってみますw
>>>>>>
>>>>>>
>>>>>>>decoyです。
>>>>>>>
>>>>>>>WHERE句に
>>>>>>>start_day <= DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%s')
>>>>>>>AND end_day >= DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%s')
>>>>>>>というものを使いたい場合
>>>>>>>Active Record クラスのwhereメソッドやget_whereメソッドに
>>>>>>>どのように書けばクエリが正しく生成されますでしょうか。
>>>>>>>
>>>>>>>1.
>>>>>>>$this->db->get_where(
>>>>>>>    テーブル名,
>>>>>>>    array(
>>>>>>>        'start_day <=' => "DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d
>>>>>>>%H:%i:%s')",
>>>>>>>        'end_day =>' => "DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d
>>>>>>>%H:%i:%s')",
>>>>>>>    ),
>>>>>>>);
>>>>>>>
>>>>>>>2.
>>>>>>>$this->db->where('start_day <=', "DATE_FORMAT(CURRENT_TIMESTAMP(),
>>>>>>>'%Y-%m-%d
>>>>>>>%H:%i:%s')");
>>>>>>>$this->db->where('end_day >=', "DATE_FORMAT(CURRENT_TIMESTAMP(),
>>>>>>>'%Y-%m-%d
>>>>>>>%H:%i:%s')");
>>>>>>>$this->db->get(テーブル名);
>>>>>>>
>>>>>>>1や2のやり方でやった場合、下記のようになってしまい正しく生成されませんでし
>>>>>>>た。
>>>>>>>
>>>>>>>
>>>>>>>start_day <= 'DATE_FORMAT(CURRENT_TIMESTAMP(), \'%Y-%m-%d 
>>>>>>>%H:%i:%s\')'
>>>>>>>end_day >= 'DATE_FORMAT(CURRENT_TIMESTAMP(), \'%Y-%m-%d %H:%i:%s\')'
>>>>>>>
>>>>>>>$this->db->query(クエリ直書き);すれば意図している結果は返ってきますが
>>>>>>>出来るだけ避けたいと考えております。
>>>>>>>
>>>>>>>以上、宜しくお願い致します。
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>Codeigniter-users mailing list
>>>>>>>Codei****@lists*****
>>>>>>>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>>>>
>>>>>>_______________________________________________
>>>>>>Codeigniter-users mailing list
>>>>>>Codei****@lists*****
>>>>>>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>>>
>>>>> _______________________________________________
>>>>> Codeigniter-users mailing list
>>>>> Codei****@lists*****
>>>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>>
>>>>_______________________________________________
>>>>Codeigniter-users mailing list
>>>>Codei****@lists*****
>>>>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>
>> _______________________________________________
>> Codeigniter-users mailing list
>> Codei****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users 




Codeigniter-users メーリングリストの案内
Back to archive index