我有两张桌子:
comments_table
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,//user who commented
`title` varchar(300) DEFAULT NULL,
`url` varchar(300) DEFAULT NULL,
`c_date` datetime,
`comment` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`)
id comment user_id
1 foo 1
2 bla 2
3 something 7
votes_table
`comment_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) unsigned DEFAULT NULL,//user who voted
`vote` tinyint(1) DEFAULT 0,
INDEX `comment_id` (`comment_id`)
comment_id user_id vote
1 2 1
2 4 -1
3 7 0
3 1 1
2 1 1
我有 2 个疑问(获取所有评论):
$comments = $wpdb->get_results($wpdb->prepare("SELECT ct.id, ct.comment, ct.user_id, ct.user_display_name, ct.avatar, ct.c_date, SUM(DISTINCT vt.vote) AS vote
FROM $comments_table as ct
LEFT JOIN $votes_table vt on ct.id = vt.comment_id
WHERE ct.media_id=%d
GROUP BY ct.id
ORDER BY ct.c_date DESC", $media_id), ARRAY_A);
获取用户投票的评论:
$user_votes = $wpdb->get_results($wpdb->prepare("SELECT vote, comment_id
FROM $votes_table
WHERE user_id=%d", $user_id), ARRAY_A);
这两个都按预期工作。是否可以在一个查询中完成这些操作?(出于性能原因)
例如,将结果 user_vote = votes_table.vote 添加到 comment_table.id votes_table.user_id 投票。
用于
MAX(vt.user_id = %d)
确定是否有任何votes_table
行来自指定用户。比较值为 1(表示 TRUE)或 0(表示 FALSE),因此MAX()
将确定是否存在。