2011-01-14 80 views
1

我有一個使用codeigniter CXTags標記庫的應用程序。PHP:活動記錄表連接

數據庫結構如下:

帖子

ID

tags_ref

ROW_ID

TAG_ID

標籤

ID

safe_tag

標籤

我的查詢基本上去,如果$ safe_tag不爲空,然後加入tags_ref上post.id = tags_ref.row_id ,將tags加入tags_ref.tag_id = tags.id,其中tags_ref.table ='posts'和tags.safe_tag ='food'

SELECT * FROM posts 
JOIN tags_ref ON posts.id = tags_ref.row_id 
JOIN tags ON tags_ref.tag_id = tags.id 
WHERE tags.safe_tag = $safe_id 

不幸的是,我在活動記錄中寫入的查詢無法正常工作。當英鎊safe_tag爲空,但是當它不是我得到錯誤的結果時,查詢完美工作。

function get_posts($id = NULL, $safe_tag = NULL) { 

    if($safe_tag != NULL){ 
     echo $safe_tag;//debugging 
     $table = 'posts'; 
     $this->db->join('tags_ref', 'posts.id = tags_ref.row_id'); 
     $this->db->join('tags', 'tags_ref.tag_id = tags.id'); 
     $this->db->where('tags_ref.table', $table); 
     $this->db->where('tags.safe_tag',$safe_tag); 
    } 

    //if an id was supplied 
    if ($id != NULL) { 
     $this->db->where('posts.city_id',$id); 
    } 

    // execute query 
    $query = $this->db->get('posts'); 
    ... 

下面是對分析查詢:

SELECT * 
FROM (`posts`) 
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id` 
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id` 
WHERE `tags_ref`.`table` = 'posts' 
AND `tags`.`safe_tag` = 'food' 
AND `posts`.`city_id` = '2' 

有人能看看嗎?我想我需要一個新的眼睛。

+0

«不幸的是我已經寫在活動記錄查詢不正確fuctioning»查詢 - 任何錯誤或意外的數據集返回?你可以在執行前看到(調試)SQL查詢作爲一個字符串與$ this-> db嗎? – 2011-01-14 20:35:24

回答

1

你忘了實際運行中的第一if{}

if($safe_tag != NULL){ 
     echo $safe_tag;//debugging 
     $table = 'posts'; 
     $this->db->join('tags_ref', 'posts.id = tags_ref.row_id'); 
     $this->db->join('tags', 'tags_ref.tag_id = tags.id'); 
     $this->db->where('tags_ref.table', $table); 
     $this->db->where('tags.safe_tag',$safe_tag); 
     $this->db->get(); // here 
    }