1

我一直在摆弄创建自己的留言板,虽然它工作正常,但我想向它添加帖子投票(帖子末尾的图表)。

我从我的两个表 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...

所以现在我需要使用第三张表 msgboard_vote。每张选票都会在表格中占一行,我希望在我的结果中有一个列来汇总该帖子的选票。投票 (vote_value) 可以是 1 或 -1。没有投票的帖子(msgboard_vote 中没有行)最好在结果中总结为 0,null 也会这样做。

修修补补了几个小时……:/非常感谢您对此的帮助:)

在此处输入图像描述

4

2 回答 2

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 回答
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 回答