簡體   English   中英

PHP CodeIgniter 多個 LEFT OUTER 加入查詢

[英]PHP CodeIgniter multiple LEFT OUTER join in on query

我正在使用 PHP CodeIgniter 從我的數據庫中查詢。 我需要使用多個 LEFT OUTER 連接。 連接使用多個條件(我不確定它是否受 bug 支持)。 我的查詢結果對於我要獲取的兩個參數具有相同的值:

詢問:

$this->db->select('anonymous.*,
    count(items_likes.id) as all_likes, count(items_comments.id) as all_comments');
    $this->db->from('anonymous');
    $this->db->where('anonymous.fid', $feed_id);

    $this->db->group_by('anonymous.id');

    $this->db->join('all_users', 'all_users.id = anonymous.uid', 'left outer');
    $this->db->join('images', 'images.ud = anonymous.uid AND images.fid = anonymous.fid', 'left outer');
    $this->db->join('items_likes', 'items_likes.uid = anonymous.uid AND items_likes.fid = anonymous.fid', 'left outer');

    $this->db->join('items_comments', 'items_comments.uid = anonymous.uid AND items_comments.fid = anonymous.fid', 'left outer');

    $list = $this->db->get()->result();

匿名:是未注冊用戶的表

fid:是提要ID

圖片:是上傳到提要的所有圖片的表格

items_likes:是每張圖片的所有用戶點贊數

items_comments:是每張圖片的所有用戶評論


問題是 all_comments 總是返回與 all_likes相同的值。 我不確定多個 LEFT-OUTER 連接是否是問題所在,或者我在每個連接語句中都使用了多個條件,即

items_comments.uid = 匿名.uid 和 items_comments.fid = 匿名.fid

日志結果:

"all_likes":"12","all_comments":"12"

雖然我有 12 個贊,但評論應該是 3

如果我按如下方式編寫查詢,則結果可以:

$this->db->select('anonymous.*,
(SELECT count( items_likes.id ) FROM items_likes WHERE items_likes.uid = anonymous.uid AND items_likes.fid = anonymous.fid) as all_likes, 
(SELECT count( items_comments.id ) FROM items_comments WHERE items_comments.uid = anonymous.uid AND items_comments.fid = anonymous.fid) as all_comments');
$this->db->from('anonymous');
$this->db->where('anonymous.fid', $feed_id);

$this->db->group_by('anonymous.id');

$this->db->join('all_users', 'all_users.id = anonymous.uid', 'left outer');
$this->db->join('images', 'images.ud = anonymous.uid AND images.fid = anonymous.fid', 'left outer');
//$this->db->join('items_likes', 'items_likes.uid = anonymous.uid AND items_likes.fid = anonymous.fid', 'left outer');

//$this->db->join('items_comments', 'items_comments.uid = anonymous.uid AND items_comments.fid = anonymous.fid', 'left outer');

$list = $this->db->get()->result();

左外連接從表 A 中生成一組完整的記錄,匹配的記錄(如果可用)在表 B 中。如果沒有匹配,右側將包含 null。

您需要添加包含 NULL 的記錄

將此 where 子句添加到您的查詢中:

$this->db->->where('items_comments.uid IS NULL')    

更多關於加入的信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM