1

私は自分のメッセージ ボードの作成をいじっていましたが、うまく機能していますが、投稿の投票を追加したいと考えていました (投稿の最後の図)。

次のように、2 つのテーブル msgboard_user と msgboard_post から必要なデータを取得しました。

SELECT p.post_id, p.user_id, u.username, get_time_diff(p.date) as date, p.ip, p.text, p.parent_post_id, p.approved AS posts
FROM msgboard_post p, msgboard_user u
WHERE p.user_id = u.user_id
AND p.approved = "yes"
ORDER BY p.date DESC
-- code for limit...

そのため、3 つ目のテーブル msgboard_vote を使用する必要があります。すべての投票はテーブルの 1 つの行を取得し、結果にその投稿の投票を合計する 1 つの列を作成したいと考えています。投票 (vote_value) は、1 または -1 のいずれかです。投票のない (msgboard_vote に行がない) 投稿は、結果として 0 として合計されることが望ましいです。null も同様です。

数時間いじくり回してきました... :/これについての助けをいただければ幸いです:)

ここに画像の説明を入力

4

2 に答える 2

1

選択した列と WHERE 句での副選択は避けてください。オプティマイザーはそれらを適切に処理しません。

SELECT p.post_id, p.user_id, u.username, 
   get_time_diff(p.date) as date, p.ip, p.text, 
   p.parent_post_id, p.approved AS posts,
IFNULL(v.vote_count, 0) AS vote_count
FROM msgboard_user u, msgboard_post p
LEFT JOIN
(SELECT post_id, COUNT(*) vote_count FROM msgboard_vote GROUP BY post_id) v
ON p.post_id = v.post_id
WHERE p.user_id = u.user_id
AND p.approved = "yes"
ORDER BY p.date DESC
于 2012-05-21T23:22:45.953 に答える
1

最も簡単な方法は、次のように、select 句にネストされたクエリを追加することだと思います。

SELECT p.post_id, (SELECT SUM(vote_value) FROM msgboard_vote WHERE post_id = p.post_id) AS vote_count...

あなたはそれを試しましたか?

于 2012-05-21T23:07:16.770 に答える