PHP: активные таблицы записей присоединяются - PullRequest
1 голос
/ 14 января 2011

У меня есть приложение, которое использует библиотеку тегов codeigniter CXTags.

Структура базы данных выглядит следующим образом:

сообщений

ID

tags_ref

row_id

таблица

tag_id

метка

ID

safe_tag

бирка

Мой запрос в основном выполняется, если $ safe_tag не равен нулю, тогда присоединяйтесь к tags_ref по post.id = tags_ref.row_id, присоединяйте теги к tags_ref.tag_id = tags.id, где tags_ref.table = 'posts' и tags.safe_tag = ' еда '

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' 

Может кто-нибудь взглянуть? Я думаю, мне нужен свежий взгляд на это.

1 Ответ

1 голос
/ 12 июня 2011

Вы забыли фактически выполнить запрос внутри вашего первого 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 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...