2017-06-07 19 views
1

を表示するためのPDOの構築右のクエリは、私は、フォーラム/ブログを作ってるんです。ユーザーはトピックを作成してコメントで話し合うことができます。最も人気のあるトピック(たとえば7)、コメントの多いトピック(先週のトピックなどを表示するのに最適です)を表示できます。私のDB構造、話題とuser_commentsは異なる表です。ここには約ようである方法です:。user_commentsでPHP、最も人気のあるトピックに

topics: 
- id 
- title 
- date 

user_comments: 
-id 
-topic_id 
-comment 
-date 

topic_idをするために使用されますどのトピックコメントが属するかを定義する。私がしようとしているのは、すべてのコメントが最も多いuser_commentsからすべてのtopic_idを選択して、最も人気のあるトピックのタイトルを表示することです。それは(コメントか何かに1回のように)すべてのトピックを複数回表示される瞬間

$stmt = $db->prepare('SELECT topic_id FROM user_comments ORDER BY comment DESC LIMIT 7'); 
$stmt->execute(); 
$topicsID = $stmt->fetchAll(); 

foreach ($topicsID as $row) { 
    // Problem is starting here, it displays topic_id multiple times 
    echo 'Most popular topic is: ' . $row['topic_id'] . '<br>'; 
    $topic_id = $row['topic_id']; 
} 
    $stmt = $db->prepare('SELECT title FROM topics WHERE id = :topic_id'); 
    $stmt->bindValue(':topic_id', $topic_id); 
    $stmt->execute(); 
    $title = $stmt->fetchAll(); 

    foreach ($title as $row) { 
    echo 'Most popular topic title is: ' . $row['title'] . '<br>'; 
    } 

: はここに私のコード例です。助けてくれてありがとう、みなさんありがとう!あなたが参加して、単一のクエリを使用して得ることができた

+0

使用によって2つのクエリを、または結合を使用しています。 2つのクエリを使用すると、最も時間のかかるuser_commentsからtopic_idを取得し、トピックのIDを選択するために2回目のクエリを1回実行することができます。 – clearshot66

+0

これはまあまあです。いいえ?それは私がそれを作ることができないので、すべてのtopic_idは一度表示されます –

+0

正確には.... – clearshot66

答えて

2

...あなたの選択、カウントおよびグループ

SELECT t.title, count(*) 
    FROM topics t 
    inner join user_comments u on u.topic_id = t.id 
    GROUP BY t.title 
    ORDER BY count(*) DESC 
    LIMIT 7 
+0

Omg、それは働いた!どうもありがとうございました! :) –

+0

しかし、先週のトピックを表示させるために、 'WHERE date> DATE_SUB(curdate()、INTERVAL 1 WEEK)'のようなものを追加することは可能でしょうか? –

+0

はい、ソースデータをフィルタリングするための好きな場所の条件を追加できます。 – scaisEdge

関連する問題