6

次のステートメントを作成しようとしています(これは機能します):

SELECT id, COUNT(*) AS item_count FROM message WHERE user_id_to = '1' AND read_date IS NULL GROUP BY message_id

Codeigniters Active Recordを使用。私のコードは次のようになります。

$this->db->select('id');
$this->db->from('message');
$this->db->where('user_id_to', $this->session->userdata('id'));
$this->db->where(array('read_date' => NULL));
$this->db->group_by('message_id');
echo $this->db->count_all_results();

$this->session->userdata('id') が「通常の」SQL ステートメントと同じ ID を出力し、正しいことを確認しました。

奇妙なことに、私の「通常の」ステートメントは 2 を返します。これは正しいことです。しかし、私の Codeigniter statmenet は 3 を返します。これは明らかに間違っています。

私は何を間違っていますか?

4

5 に答える 5

9

これを試して:

$this->db->where('read_date IS NULL', null, false);

3 番目のパラメーターは、句をエスケープしないように彼に指示します...

于 2013-11-05T14:17:27.960 に答える
0

まあ、私はそれが別の方法であると思います:

$this->db->where('read_date IS NOT', 'NULL');

これはまだテストしていませんが、理論的には動作するはずです。誰か確認してください。

于 2016-02-05T15:57:48.420 に答える
0

これが where コマンドでの多重比較のやり方です。列データがnullでないかどうかを確認するには

'sc_id' => TRUE

where句(Codeignitor)で列をフィルタリングする方法の完全な例を次に示します。最後の 1 つはNot NULL Compressionを示しています

$where = array('somebit' => '1', 'status' => 'Published', 'sc_id' => TRUE );
$this->db->where($where);
于 2014-05-07T10:25:44.353 に答える