2016-05-12 3 views
0

У меня есть две таблицы, одна - столбец, а другой - таблица комментариев. В которой я использую post_id как foreign_key. Теперь я хочу получить сообщение со всеми его комментариями. и ответ должен быть в этом формате.получить данные из нескольких таблиц в codeigniter?

{ 
    "posid":1, 
    "post_name":"testpost", 
    "comments":[{ 
        "comment_id":1, 
        "comment_des":"testcoment" 
       },{ 
        "comment_id":2, 
        "comment_des":"testcoment2" 
       } 
      ] 
    } 

Может ли кто-нибудь написать простой SQL-запрос для меня для этого типа ответа?

Я попытался выполнить запрос в codeigniter, но это возвращает несколько результатов, означая одно сообщение два раза, потому что одно сообщение содержит два комментария.

$this->db->select("p.post_id,p.post_desc,p.post_time ,c.id,c.comment_desc,c.comment_time"); 
    $this->db->join("asoc_comments as c","p.post_id = c.post_id","INNER"); 
$response = $this->db->get("asgn_posts as p")->result(); 
+0

Во-первых, используйте активную запись, это имеет смысл. Во-вторых, для этого вывода я бы использовал вложенный запрос, т. Е. Делал запрос для сообщений, а другой - в цикле результатов. Тогда результат будет выглядеть так. – jtheman

+0

@jtheman Вы можете написать образец запроса, пожалуйста? –

+0

См. Ответ ниже – jtheman

ответ

1

Активная запись пример, где мы петлевые результаты для того, чтобы форматировать вывод право без получения нескольких строк результата для каждого поста:

$q = $this->db->select('post_id,post_desc,post_time')->get('asgn_posts'); 
$data = array(); 
foreach ($q->results() as $p): 
    $qc = $this->db->select('id,comment_desc,comment_time')->where('post_id',$p->post_id)->get('asoc_comments'); 
    $p->comments = $qc->results(); 
    $data[] = $p; 
endforeach; 
return $data; 
+1

спасибо sir g, отлично работает ... :) –

0

Вы можете написать этот запрос, чтобы показать свой результат:

SELECT p.post_id as 'posid',p.post_name,(SELECT c.id as 'comment_id' , c.comment_desc as 'comment_des' from asoc_comments c where c.post_id = p.post_id) as 'comments' from asgn_posts p 

Например

$response=$this->db->query("SELECT p.post_id as 'posid',p.post_name,(SELECT c.id as 'comment_id' , c.comment_desc as 'comment_des' from asoc_comments c where c.post_id = p.post_id) as 'comments' from asgn_posts p")->result(); 
0

Вы можете сделать эту задачу путем присоединения к этому две таблицы с помощью SQL Row или Active Record.

Как

public function your_model_method(){ 
    $this->db->select('table_1.*,table_2.*')->from('table_1'); 
    $this->db->join('table_2','table_2.key_field=table_1.key_field'); 
    return $this->db->get()->result_array(); 
    } 

Надеется, что это поможет ..

Спасибо!

Смежные вопросы