1

私はこのようなコードを持っています:

   function mgl_get_by($col,$id)
            {    
            $this->db->select('*');
            $this->db->from('global_info');
            $this->db->join('ad', 'id_ad = id_global_info');
            $this->db->where('info_type_id', 1);
            $this->db->where($col, $id);
            $this->db->or_where("$col REGEXP $id");
            $this->db->order_by('paid', 'desc');
            $this->db->order_by('date_created', 'desc');  
            $q = $this->db->get();        
            return $q = $q->result_array();   
    }

$ colはテーブル内の行の名前であり、$idはクエリの一意のIDです。ほとんどの場合、これは一意の番号ですが、このテーブルには日付行があり、テーブルにはタイムスタンプとして挿入されますが、クエリを実行するときは、選択した日のすべての一致を選択する必要があります(たとえば、すべてのデータを選択する必要があります) 2012年6月11日から)。どうすればこれを行うことができますか(私はREGEXPに精通していません)?

4

2 に答える 2

1

私はこれがREGEXPで行われるのを見たことがありません。

特定の日にすべてが必要な場合、本当に必要なのは次のとおりです
。2012-06-11 <=(日付)AND(日付)<2012-06-12

$ colを確認し、日付列の場合は日付範囲を実行し、そうでない場合は既にあるwhere句を実行します。

于 2012-06-11T08:34:42.353 に答える
1

ここではRegExpは必要ないと思います-問題ありませんLIKE。日付がタイムスタンプとして保存されている場合は、次のことを行う必要がありますFROM_UNIXTIME($col) LIKE '2012-06-11'

編集:しかし、それは効率的ではありません。より良い方法は、タイムスタンプを整数として比較することです。

$col >= UNIX_TIMESTAMP('2012-06-11 00:00:00') AND $col < UNIX_TIMESTAMP('2012-06-12 00:00:00')
于 2012-06-11T08:35:36.187 に答える