gpt4 book ai didi

Mysql高级SELECT,还是多重SELECT?电影关键词

转载 作者:搜寻专家 更新时间:2023-10-30 22:21:33 24 4
gpt4 key购买 nike

我有一个包含电影的mysql数据库,如下所示:

MOVIES(id,title)

KEYWORDS_TABLE(id,key_id) [id isreferenced to movies.id, key_id isrefernced to keywords.id]

KEYWORDS(id,keyword) //this doesn't matter on my example..

基本上我有每部电影的标题和情节关键字,我想选择具有相同关键字和给定电影 ID 的所有电影。

我试过类似的方法:

SELECT key_id FROM keywords_tableWHERE id=9

doing that in php and storing all theIDs in an array $key_id.. then i buildanother select that looks like:

SELECT movies.title FROMmovies,keywords_table WHEREkeywords_table.key_id=$key_id[1] ORkeywords_table.key_id=$key_id[2] OR......... ORkeywords_table.key_id=$key_id[n]

这有点管用,但它需要太多时间,因为我们谈论的是一个包含成千上万条记录的数据库。

那么,有什么建议吗?谢谢!

最佳答案

有一件事你可以改进......而不是写 x = a OR x = b OR x = c 你可以将它缩短为:x IN (a, b, c)

SELECT movies.title
FROM movies,keywords_table
WHERE keywords_table.key_id IN ($key_id[1], $key_id[2], ..., $key_id[n])

另请注意,您的查询中缺少连接条件。您当前正在执行 CROSS JOIN,也称为笛卡尔积。我想你想要这个:

SELECT movies.title
FROM movies
JOIN keywords_table
ON movies.id = keywords_table.id
WHERE keywords_table.key_id IN ($key_id[1], $key_id[2], ..., $key_id[n])

此查询可以多次返回同一部电影,因此您可能希望添加 DISTINCT 以删除重复项。您也可以在一个查询而不是两个查询中完成所有操作,作为进一步优化:

SELECT DISTINCT M.title
FROM keywords_table K1
JOIN keywords_table K2
ON K2.key_id = K1.key_id
JOIN movies M
ON K2.id = M.id
WHERE K1.id = 4

关于性能,请确保在 movies 上将主键设置为 (id) 并设置为 (key_id, id)keywords_table 上。

关于Mysql高级SELECT,还是多重SELECT?电影关键词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056271/

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