1

ホームページに最新の100件の投稿を表示し、すべての投稿にコメントの数を表示するphp/mysqlで簡単なブログを作成しました。

これは擬似コードです:

 Mysql query to get latest 100 posts.
 While cicle:
    Get title and body of each post.
    Mysql query to get the comments's number of the post.

データベース構造:

Post:
-id
-title
-body
-date

Comments:
-id
-id_post
-id_user
-body
-date

100 クエリを回避する方法はありますか?

4

4 に答える 4

6

これはかなり単純なクエリです。

SELECT p.id, p.title, p.body. p.date, COUNT(c.id) AS comment_count
FROM Post p
LEFT JOIN Comments c ON p.id=c.id_post
GROUP BY p.id, p.title, p.body. p.date
ORDER BY p.id DESC
LIMIT 100

(テストされていないことに注意してください。出発点として使用してください。)

データベースは派手なファイルシステムに過ぎず、知る必要があるすべてのSQLであると一般的に信じられていることは知っていますが、SELECT * FROM data基本的なSQLの学習に時間を費やすことは絶対に価値があります.

于 2013-05-02T10:05:18.413 に答える
3

両方のテーブルをJOINSする SQL クエリを記述して、必要なすべての情報を返すことができます。

SELECT
     p.id,
     p.title,
     p.body,
     p.date,
     COUNT(c.id)

FROM  Post p
LEFT JOIN Comments c ON p.id = C.post_id

GROUP BY p.id, p.title, p.body, p.date

ORDER BY p.date DESC

LIMIT 100

Jeff Atwood は、結合がどのように機能するかを説明する優れたビジュアル ガイドを提供しています。

日付順に上位 100 件の投稿を効果的に選択し、コメントの合計を数えます (コメントが存在する場合 - そのため、LEFT JOIN を使用しますが、INNER JOIN を使用する場合は、コメントのある投稿のみを返します)。

GROUP BYは、それが COUNT (および SUM や AVG などの他の集計関数が機能する方法) であるため、行をカウント/合計/平均化するためのルールを伝える必要があります。

作成された順序で投稿を返すように、投稿日を DESCend 順 (新しい順) にORDER BYします。

LIMIT 100 ステートメントは、MySql の最初の 100 行のみを返します。要約の投稿数を変更したい場合は、任意の数 (トップ 10、50 など) に変更します。

全体的な結果として、投稿情報とコメント数をすべて 1 つのクエリに含む結果セットが得られます。これらの結果は、適切と思われる方法で Web アプリケーションに表示できます。

于 2013-05-02T10:06:20.073 に答える
2

テーブルに参加して、その投稿のコメント数を数えるだけです。

SELECT p.id, p.title, p.body, COUNT(pc.id) as comments 
FROM Post p 
LEFT JOIN Comments pc ON (p.id = pc.id_post) 
GROUP BY pc.id_post LIMIT 100

それがあなたが求めているものであることを願っています。

于 2013-05-02T10:04:22.983 に答える
-2

投稿テーブルと投稿情報テーブルを結合し、同時にそれらを選択します

select p.id,pi.comments from posts as p, post_info as pi where p.id == pi.id

またはそのようなもの。

編集:

select p.title,p.body,p.date,count(c.id) from post as p, comments as c where p.id == c.id_post

私は信じている。

于 2013-05-02T09:59:38.460 に答える