gpt4 book ai didi

mysql - 问题的最优查询

转载 作者:行者123 更新时间:2023-11-29 14:50:01 26 4
gpt4 key购买 nike

我有一个新闻表,如下所示:

CREATE TABLE `news` (
`title` varchar(255) NOT NULL,
`hash` char(40) NOT NULL,
PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

另外一个投票表如下:

CREATE TABLE `votes` (
`hash` char(40) NOT NULL,
`user_id` varchar(255) NOT NULL,
`vote_type` enum('up','down') DEFAULT NULL,
PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

现在我想在用户登录时得到类似的东西-

this_is_a_title hash_12312312 NULL

this_is_a_title hash_12312313 up

this_is_a_title hash_12312314 NULL

this_is_a_title hash_12312315 down

您能为此建议一个最佳的单个查询吗?

我认为我的问题不清楚。对此感到抱歉。我所说的 NULL 字段是指一个新字段,该字段没有来自该用户或任何人的任何投票。

<小时/>

我的版本是 -

SELECT news.*, votes.vote_type
FROM news
LEFT OUTER JOIN votes
ON votes.`hash` = news.`hash`
AND votes.`user_id` = #

最佳答案

SELECT * FROM news JOIN votes ON news.hash = votes.hash WHERE votes.user_id = #;

这将SELECT对 ID 为 # 的特定用户的新闻文章进行所有投票。这些表通过主键hash连接。因此,考虑到您当前的配置,这是最佳选择。您可以为 user_id 添加索引以进行额外优化。

注意:由于您正在寻找最佳,因此我建议您不要使用LEFT JOIN。假设新闻文章会随着时间的推移而增长,使用直接JOIN会将结果集限制为仅用户已投票。平均而言,应该要小得多。但是,您需要在逻辑中对此进行补偿 - 即,缺少新闻记录意味着没有投票与 NULL 结果。

关于mysql - 问题的最优查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com