2016-10-14 18 views
0

テーブルarticleのすべての行を表示したい場合、記事行ごとにSUMvotesを別のテーブル(likes)から取得します。クエリ。私が持っているもの。ここコードシニターで複数のクエリを実行し、最初の結果に基づいて結果を返します

$query = "SELECT article.title,article.tags,article.description,article.slug,users.username,article.photo,article.id,article.date,SUM(likes.votes) as upvotes 
      FROM article"; 
$query .= " LEFT JOIN users ON article.user_id = users.user_id "; 
$query .= " LEFT JOIN likes ON likes.article_id = article.id "; 

しかし、このクエリで私の問題は、私は1行だけを取り出します!テーブルlikesには1行しかありません...

articleテーブルに基づいて結果を表示したい(私は約50行あります)...特定の記事の投票に関連するものがない場合は、 (0投票)。

ありがとうございます。

+0

重複質問は...すでにここに答えhttp://stackoverflow.com/questions/1192019/do-aggregate-mysql-functions-always-return-a-単列 –

+0

私はすでにそれを見たが、これは私の問題を解決していないビュー...グループでSUMを返すしたいので、私の質問に答えていない。 –

+0

あなたのリンクは1つのテーブルのみを使用し、複数のテーブルは使用しません。 –

答えて

0

こちらのリンクを参照してください。

$query = "SELECT article.title, article.tags, article.description, article.slug, users.username, article.photo, article.id, article.date, SUM(likes.votes) as upvotes FROM article"; 
$query .= " LEFT JOIN users ON article.user_id = users.user_id "; 
$query .= " LEFT JOIN likes ON likes.article_id = article.id "; 
$query .= " GROUP BY article.id"; 

かCodeIgniterの使用方法:

$this->db->select("article.title, article.tags, article.description, article.slug, users.username, article.photo, article.id, article.date"); 
$this->db->select("SUM(likes.votes) as upvotes", false); 
$this->db->from("article"); 
$this->db->join("users","article.user_id = users.user_id"); 
$this->db->join("likes","likes.article_id = article.id"); 
$this->db->group_by("article.id"); 
$query = $this->db->get(); 
return $query->result_array(); 
+0

ありがとう、これは問題を解決しました。 –

0

ストアドファンクションは、単一の値を返す特別な種類のストアドプログラムです。ストアド・ファンクションを使用して、SQL文またはストアド・プログラム間で再利用可能な一般的な式またはビジネス・ルールをカプセル化します。ここで

お問い合わせをする

$query = "SELECT article.title,article.tags,article.description,article.slug,users.username,article.photo,article.id,article.date,custom_SUM(article.id) as upvotes 
      FROM article"; 
$query .= " LEFT JOIN users ON article.user_id = users.user_id "; 

とカスタムのMySQL関数

DELIMITER $$ 
    CREATE FUNCTION custom_SUM(p_article_id int(11)) RETURNS VARCHAR(10) 
     DETERMINISTIC 
    BEGIN 
     DECLARE likes varchar(10); 
     SET likes =(select sum(likes.votes) from likes where likes.article_id=p_article_id); 

    RETURN (likes); 
    END 

は、コードにして、グループを追加しますhttp://www.mysqltutorial.org/mysql-stored-function/

関連する問題