2017-08-08 9 views
0

以下の2つの機能をどのようにして同じものにすることができますか$qrycodeigniter mysqlを並べ替える

public function get_page_likes() { 
    $qry = $this->db->query("SELECT p.id, p.tid, IF(SUM(pl.like) > 0, SUM(pl.like), 0) AS likes FROM pages_test AS p LEFT JOIN page_likes_test pl ON p.id = pl.pid AND p.tid = pl.tid GROUP BY p.tid, p.id HAVING likes >= 0 ORDER BY p.id, p.tid"); 
    return $qry->result_array(); 
} 

public function get_page_dislikes() { 
    $qry = $this->db->query("SELECT p.id, p.tid, IF(SUM(pl.dislike) > 0, SUM(pl.dislike), 0) AS dislikes FROM pages_test AS p LEFT JOIN page_likes_test pl ON p.id = pl.pid AND p.tid = pl.tid GROUP BY p.tid, p.id HAVING dislikes >= 0 ORDER BY p.id, p.tid"); 
    return $qry->result_array(); 
} 

https://i.stack.imgur.com/NJsEn.png

+1

テーブル構造と望ましい結果の例を追加してください。 – Kisaragi

+0

@kisaragiおかげさまでテーブルの構造、結果、詳細な説明を追加しました – Mason

答えて

0

変更することを

$qry = $this->db->query("SELECT p.id, p.tid, SUM(pl.like) AS likes, SUM(pl.dislike) AS dislikes FROM pages_test AS p LEFT JOIN page_likes_test pl ON p.id = pl.pid AND p.tid = pl.tid GROUP BY p.tid, p.id"); 

リターン$ qry-> result_arrayようなクエリ();

+0

ありがとう!これはほとんど動作します:)。しかし、それは "page_likes_test"からの値の取得だけです。また、2番目のテーブル「pages_test」(画像に示されているように)からデータをフェッチする必要があります。何か案は?あらかじめありがとう – Mason

+0

ok私はそれを見ます –

+0

ねえメイソン!それを確認してください私はクエリを変更しました –

0

https://www.codeigniter.com/userguide3/database/query_builder.html

public function get_page_likes_dislikes(){ 

    return $this->db->select('p.id, p.tid, IF(SUM(pl.like) > 0, SUM(pl.like), 0) AS likes, IF(SUM(pl.dislike) > 0, SUM(pl.dislike), 0) AS dislikes') 
     ->join('page_likes_test pl', 'p.id = pl.pid AND p.tid = pl.tid', 'left') 
     ->group_by('p.tid, p.id') 
     ->order_by('p.id, p.tid') 
     ->get('pages_test p')->result_array(); 
} 
+0

何かの理由で私のテーブルに 'id'が入っていても 'unknown field p.id in field list'というエラーが表示されています – Mason

+0

これで動作します。私はpage_testsに別名を与えたことはありません –

関連する問題