1

次のテーブルを使用した単純な記事とコメントのシステムがあります。

記事テーブル:

ID | Writer | Text
 1 | Bob    | good article
 2 | Marley | read this

コメント表:

ID | Article_ID | Comment
 1 |      1     |  i love this article
 2 |      1     |  good one
 3 |      2     |  waiting for more

その下にコメントがある各記事を選択したいと思います。次のクエリを使用します。

SELECT * FROM articles LEFT JOIN comments ON articles.ID = comments.Article_id 

期待される結果:

Article 1: good article
Comments: 1 - i love this article
          2 - good one

Article 2: read this
Comments: 3 - waiting for more

私が得るもの:

Article 1: good article
Comments: 2 - good one

Article 2: read this
Comments: 3 - waiting for more

では、コメント付きの各記事を選択し、ID の降順で記事を並べ替え、ID の降順でコメントを並べ替えるにはどうすればよいでしょうか。

ありがとう

4

2 に答える 2

1

上手、

実際、期待した結果と結果の両方が間違っています。データをどのように処理しますか?

SQLクエリは結果としてテーブルを返すため、期待される結果は間違っています。行に別のテーブルを含めることはできません。

クエリは次の結果を返します。


記事1:良い記事

コメント:1-私はこの記事が大好きです


記事1:良い記事

コメント:2-良いもの


記事2:これを読む

コメント:3-もっと待っています


ページに関連するデータを取得するには、魔女で十分です。

ただし、クエリを分割することをお勧めします。記事には通常、結果に複製したくないデータがたくさん含まれています。

そのように(テストされていないコード):

$articles_sql="SELECT * FROM articles";
$comments_sql="SELECT * FROM comments";

$articles=$db->query($sql).getResults();

$comments=$db->query($sql).getResults();

foreach($articles as &$article){
    $article['comments']=array();
    foreach ($comments as $comment){
        if($article['id']==$commnet['article_id']){
            $article['comments'][]=$comment;
        }
    }
}

それが役に立てば幸い!

于 2013-01-25T17:01:43.413 に答える
0

コメントテーブルには1対多の関係があるので、それを使用して、記事を対応するコメントに左結合するか、元のクエリでRIGHT JOINを使用できると思います.

SELECT * FROM comments LEFT JOIN articles ON comments.Article_id = articles.ID

また

SELECT * FROM articles RIGHT JOIN comments ON articles.ID = comments.Article_id

または私も思う

SELECT * FROM articles JOIN comments ON articles.ID = comments.Article_id 

記事 ID の降順、コメント ID の降順で並べ替えるには、次のように追加します。

ORDER BY articles.ID DESC, comments.ID DESC
于 2013-01-25T16:43:52.910 に答える