我怀疑最优化的是什么。我正在建立一种“社交网络”。用户可以上传:照片almbums,文件或消息。每个数据都保存在不同的表中。接收器保存为userId用逗号分隔,如下:“1,2,3,4,”。现在我想抓住为用户发送的所有内容。我有2种方法(我知道)这样做。
分别获取每个表(效率不高,因为我必须对从另一个表中获取deder发送者用户的每一行进行查询。)然后处理数据。
加入3个表格。但据我所知,我不能在JOIN中使用LIKE。
有什么想法吗?
PS:我在php和mysql中这样做
答案 0 :(得分:1)
您可以在JOIN中使用LIKE(请参阅how to use a like with a join in sql?),但如果我理解正确,您不应将接收器表示为以逗号分隔的字符串列表。而是使用另一个表,每个接收者 - 项目关系都有一个单独的记录,这样您就可以查询它而无需使用LIKE。
答案 1 :(得分:1)
您可以在like
中使用join
。您正在寻找的表达式如下:
on find_in_set(a.value, b.list) > 0
但是,不建议这样做,因为MySQL无法使用索引优化查询的性能。换句话说,列表中的项目应该是联结/关联表中的单独行。
如果你需要做这样的连接,那么你应该规范化你的数据结构。这意味着,不要将列表存储在逗号分隔的字段中。
答案 2 :(得分:0)
您想要的是图表数据库。
您可以选择为此目的而准备的内容,或尝试将图表映射到SQL数据库。
例如:
类似的东西:
CREATE TABLE user (varchar user_id, varchar email, etc...);
CREATE TABLE link (varchar sender, varchar recepient)
CONSTRAINT FOREIGN KEY (sender) REFERENCES user (user_id)
CONSTRAINT FOREIGN KEY (recepient) REFERENCES user (user_id);
CREATE TABLE aldbum (varchar sender, varchar recepient, album stuff)
CONSTRAINT FOREIGN KEY (sender, receipient) REFERENCES link (sender, recepient);
-- repeat extension tables for files, messages