2

2 つの単純な SQL クエリを持つ php スクリプトを改善しています。私がやろうとしているのは、2 つのクエリを 1 つに結合することです。

最初のクエリ:

SELECT categories.*, entries.* 
FROM categories, entries 
WHERE entries.cat_id = categories.cat_id 
ORDER BY dateposted ASC 
LIMIT 5;

2 番目のクエリ:

SELECT comments.* 
FROM comments 
WHERE comments.entry_id = '. $row['id'].';

これらの 2 つは、別々にするとうまく機能します。それらを 1 つに結合する必要があるだけで (まだ単純ですが、UNION や INNER JOIN は使用しないでください)、クエリ内の特定のエントリに対するコメントの数を数えることができます。また、私の「コメント」テーブルには 5 つの列 (comment_id、post_id、author、body、dateposted) があります。

さまざまな方法を試しました。このようなもの:

SELECT categories.*, entries.*, COUNT(comments.entry_id) AS comm_num 
FROM categories, entries, comments 
WHERE entries.cat_id = categories.cat_id 
AND comments.entry_id = entries.id 
ORDER BY dateposted ASC LIMIT 5;

動作しませんでした...

どんな助けでも大歓迎です。

4

1 に答える 1

1

最初のクエリは基本的に結合であり、それ以上高速ではない可能性があります。次のように、(対応するカテゴリ情報を表示しながら) エントリをクエリできます。

SELECT entries.*, categories.* 
FROM entries
LEFT JOIN categories ON entries.cat_id = categories.cat_id 
ORDER BY dateposted ASC 
LIMIT 5;

また、このクエリで各コメント行を実際に返すのではなく、「エントリ」ごとのコメント数を取得したいようです。その数については、おそらくこれを行うことができます:

SELECT entries.*, categories.*, COUNT(comments.comment_id) AS comm_num  
FROM entries
LEFT JOIN categories on entries.cat_id = categories.cat_id
LEFT JOIN comments on comments.entry_id = entries.entry_id
GROUP BY entries.entry_id
ORDER BY dateposted ASC 
LIMIT 5;

COUNT 関数は、エントリ ID ではなく、コメント ID をカウントしていることに注意してください。

于 2012-11-13T05:39:34.400 に答える