2016-05-20 11 views
-1

各カテゴリから最大3つの投稿を表示したい。また、私は各カテゴリーに少なくとも3つの投稿があることを確認したい(投稿数を得る)。mysql left joinから2つの異なる制限を取得する

+---------+---------------+ 
| cat_id | cat_name  | 
+---------+---------------+ 
|  1 | cat name 1 | 
|  2 | cat name 2 | 
|  3 | cat name 3 | 
+---------+---------------+ 

記事テーブル

+------+--------+-------+ 
| p_id | post | c_id | 
+------+--------+-------+ 
| 1 | post 1 | 1 | 
| 2 | post 2 | 1 | 
| 3 | post 3 | 2 | 
| 4 | post 1 | 2 | 
| 5 | post 2 | 1 | 
| 6 | post 3 | 3 | 
| 6 | post 3 | 1 | 
+------+--------+-------+ 

クエリ

if($results=$mysqli->query(SELECT * FROM categories LEFT JOIN posts ON posts.p_id= categories.cat_id WHERE posts.p_id= categories.cat_id ORDER BY cat_id LIMIT 0, 10")){ 
    while($row = mysqli_fecth_array($results)){ 
     //Do stuff 
     } 
    $results ->close(); 
    } 

どれ例やコメントが高く評価されているテーブルストレッチャ

下のカテゴリーの表を参照してください。

+1

テーブルカテゴリ(cat_id)でテーブルの投稿(c_id)のカテゴリIDに参加するべきではありませんか? http://www.w3schools.com/sql/sql_join.asp –

+0

google "$ results = $ mysqli-> query"を参照してください。返されるすべての結果は、あなたのコードが欠けていますか? – Strawberry

+1

これがあなたの本当のコードならば。あなたはここに 'mysqli_fecth_array'という大きな誤植があります(SELECT? - 構文の強調表示に気付いています)。 –

答えて

1

MySQLと正常なクエリでは、各カテゴリから最大3つの投稿を取得することはできません。そのためのウィンドウ関数のサポートが必要です。私は各カテゴリのための別のクエリを実行します。 S上のカテゴリSに参加し、内側支柱cから

SELECT c_id, COUNT(*) FROM posts GROUP BY c_id; 
0

が別個(c.postid)を選択し、c.postname、s.category_name:第二部についてはhttps://stackoverflow.com/tags/window-functions/info

:あなたはこのタグに短い情報を読み取ることができます.cat_id = c.cat_idによるc.cat_idによるグループCOUNT(c.cat_id)> 3の制限3>

関連する問題