gpt4 book ai didi

MySQL 在其他表的数组上使用过滤表

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:49 25 4
gpt4 key购买 nike

我有两个表:profile 和 hobbie

每个个人资料最多可以选择爱好,什么将作为 id 数组保存在 profile.p_hobbies 中(例如:[1,5,7,8,9])

现在我想获取个人资料爱好的名称。我认为它应该是某个链接:

SELECT hobbie.h_name
FROM profile, hobbie
WHERE profile.p_id=37 AND hobbie.h_id IN profile.p_hobbies

结果是失败#1064

#1064 - SQL 语法中的 Fehler。 Bitte die korrekte Syntax im Handbuch nachschlagen bei 'profile.p_hobbies LIMIT 0, 25' in Zeile 3

我已经在其他 SQL 查询中使用了 IN 方法。我想如果我要使用的数组也是来自 SQL 数据库的数据,我就不能使用它吗?

有什么我可以不使用多个查询来做的吗?

我正在使用 MariaDB-9

最佳答案

MySQL 中没有数组类型。你的数据结构有问题。您应该有一个association/junction 表,每个用户和爱好一行。像这样:

create table profileHobbies (
profileHobbieId int auto_increment primary key,
profileId int,
hobbieId int,
foreign key (profileId) references profiles(profileId),
foreign key (hobbieId) references hobbies(hobbieId)
);

行看起来像这样:

profileHobbieId   profileId   HobbieId
1 1 1
2 1 3
3 1 5

那么您的查询将如下所示:

SELECT h.h_name
FROM profileHobbies ph JOIN
hobbie h
ON ph.hobbie_id = h.hobbie_id
WHERE ph.profile_id = 37 ;

您不想将爱好列表存储为分隔字符串的原因有很多。这里有一些:

  • ID 是整数。数据应使用正确的类型存储,整数不是字符串。
  • 应正确声明外键关系。
  • SQL 的字符串处理能力很差。
  • 管理列表所需的字符串函数阻止优化器使用索引。
  • SQL 有一个非常好的存储列表的数据结构。它被称为,而不是字符串

关于MySQL 在其他表的数组上使用过滤表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456450/

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