0

誰かが私のサイトのブログ記事にアクセスするたびに、これをテーブル [blog_article_hits] に記録します。各訪問には 1 つの行があります。ここで、過去 14 日間のトレンド記事のリストを表示して、記事のタイトルとその記事のヒット数またはパーセンテージを表示したいと考えています。

例:

This is a blog article        1,0732
This is another article       930

私の試み:

SELECT
tre.article_id, COUNT(*) AS total_hits, art.title, art.description,
pho.photo_id
FROM blog_article_stats tre
LEFT JOIN blog_articles AS art ON tre.article_id = art.article_id
LEFT JOIN blog_photos AS pho ON art.article_id = pho.article_id
WHERE tre.d_time BETWEEN DATE_SUB(Now(), INTERVAL 14 DAY) AND Now()
AND pho.status = 'Published' AND art.status = 'Published'
GROUP BY tre.article_id
ORDER BY total_hits DESC LIMIT 5

それは非常に近いですが、完全には正しくありません。最も人気のある記事は正しい順序でリストされていますが、各タイトルの横にあるカウントは正しくありません。実際には、各記事に何枚の写真があるかを示しているのであって、その記事が何回アクセスされたかではありません。GROUP BY が役立つと思い、[pho.article_id] に 2 番目の GROUP 句を追加しようとしましたが、役に立ちませんでした。

[pho.photo_id] を選択して [pho.blog_photos] に参加しています。これは、リストされた各結果の横に 1 枚の写真を表示したいからです。

この問題を解決する方法を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

1

カウントを次のように変更します。

COUNT(DISTINCT tre.PK) AS total_hits

PKそのテーブルの主キーはどこですか。

于 2012-10-10T18:33:11.283 に答える