2015-02-03 4 views
0

i m используя Codeigniter. Я хотел показать все сообщения с их соответствующими категориями. я сделал код, но он показывает только одну категорию сообщения. почему мой код не получает все категории сообщений? любое решение или улучшение будут хорошими. вот мои коды:Получите все категории должностей

$this->db->select("posts.*, categories.*"); 
$this->db->from('posts'); 

//get cats 
$this->db->join('post_cat', 'posts.post_id = post_cat.post_id', 'LEFT'); 
$this->db->join('categories', 'post_cat.cat_id = post_cat.cat_id', 'LEFT'); 

//get published blogs 
$this->db->where('post_type', 'blog'); 
$this->db->where('post_status', 'published'); 

$this->db->group_by("posts.post_id"); 
$this->db->order_by("post_id", "desc"); 

$query = $this->db->get(); 

return $query->result_array(); 
+0

Только предположение, так как я не знаю синтаксис CodeIgniter ... Вы можете использовать 'GROUP BY post.post_id', поэтому я считаю, что вам нужно использовать строки 'GROUP_CONCAT' для строк' post_cat' (если существует связь 0 ... n между сообщениями и категориями, как кажется). Или не используйте 'GROUP BY' вообще ... –

+0

без записей трудно помочь –

+0

@ ZZ-bb, если вы не знаете codeigniter, то вот SQL: SELECT' posts'. *, 'Categories'. * FROM ('posts') LEFT JOIN' post_cat' ON 'post_cat'.post_id' =' posts'.'post_id' LEFT JOIN 'categories' ON' categories'.'cat_id' = 'post_cat'.cat_id' WHERE' post_type' = 'news' AND 'post_status' = 'published' GROUP BY' posts'.'post_id' ORDER BY 'post_id' desc –

ответ

0

Я предполагаю, что вы сделали опечатку здесь.

Try ниже код:

$this->db->select("posts.*, categories.*"); 
$this->db->from('posts'); 

//get cats 
$this->db->join('post_cat', 'posts.post_id = post_cat.post_id', 'LEFT'); 
$this->db->join('categories', 'post_cat.cat_id = categories.id', 'LEFT'); 
// you did typo in above statement here ==> post_cat.cat_id = post_cat.cat_id 

//get published blogs 
$this->db->where('post_type', 'blog'); 
$this->db->where('post_status', 'published'); 

$this->db->group_by("posts.post_id"); 
$this->db->order_by("post_id", "desc"); 

$query = $this->db->get(); 

return $query->result_array(); 
+0

да, я исправил эту опечатку несколько минут назад, но ничего не происходит. чтобы сделать вас более ясными, вот мои таблицы sql и запросы: http://pastie.org/9883714 http://pastie.org/9883717 –

+0

Оба ваши 'post_id' одинаковы в таблице' post_cat'. В этом случае удалите 'group_by' –

+0

, вы не дали правильных предложений в любом случае, я нашел решение для этого! –

0

я нашел решение и здесь:

//select posts,cats,tags 
$this->db->select("posts.*, GROUP_CONCAT(DISTINCT categories.cat_slug,'-',categories.cat_name) as cat",FALSE); 
$this->db->from('posts'); 

//join cats 
$this->db->join('post_cat', 'post_cat.post_id = posts.post_id', 'LEFT'); 
$this->db->join('categories', 'categories.cat_id = post_cat.cat_id', 'LEFT'); 

//get published blog 
$this->db->where('post_type', 'blog'); 
$this->db->where('post_status', 'published'); 

$this->db->group_by("posts.post_id"); 
$this->db->order_by("post_id", "desc"); 

$query = $this->db->get(); 

return $query->result_array(); 
Смежные вопросы