gpt4 book ai didi

mysql - SQL 查询查找表和指定条件之间的列列表中的公共(public)项?

转载 作者:行者123 更新时间:2023-11-29 10:29:00 24 4
gpt4 key购买 nike

因为我读到在循环中使用查询不是一个好主意,所以我正在寻找一种使用 JOIN 和 GROUP by 等的方法。不知道能不能实现。

我有一个包含不同用户的表及其相应的列,其中包含不同类别中最喜欢的项目的列表。例如:

Column 1 : usernames
Column 2 : Food - contains a list of the user’s favorite food
Column 3 : Sports - contains a list of the user’s favorite sports
Column 4 : Music - contains a list of the user’s favorite music

现在假设我已经有了一些标准,我想知道它是否与所有列都匹配:

Column 2 :  contains any of the following: peaches, pears, apples
Column 3 : contains any of the following: football, baseball, basketball
Column 4 : contains any of the following: jazz, rock

我的问题是:是否可以生成一个 SQL 查询来告诉我用户以及用户每一列的常用项?我想知道用户在每列中匹配了多少个项目,以及每列匹配的项目的名称是什么。如果可能的话,您会采取什么步骤来做到这一点?谢谢。

最佳答案

该解决方案名为 data normalization 。你会有

Table Users
ID Name
1 John
2 Bea

Table Sport
ID NameOfTheGame
1 Hockey
2 Football

Table Food
ID Dishname
1 Spaghetti
2 Apples


Table SportPrefs
ID FK_ID_Users FK_ID_Sport
1 1 2 # John preferes Football
2 1 1 # and hockey
3 2 2 # Bea only hocky


Table FoodPrefs
ID FK_ID_Users FK_ID_Sport
.... ... ...

然后就可以查询了

select * 
from Users
join SportPrefs on Users.Id == SportPrefs.FK_ID_Users
join Sport on SportPrefs.FK_ID_Sport == Sport.ID
WHERE ....

在处理基于 SQL 的数据库时,在列中存储“逗号分隔”或任何内容列表通常是一个坏主意 - 这样连接/查询和编辑就会变得复杂 - 想想如果有人突然不喜欢他的 20 个中的一个该怎么办您喜欢的菜肴,您必须从一长串文本中进行编辑。

日期规范化可帮助数据库构建良好的索引以快速获得结果 - 并有助于您保持理智,因为您的 sql 比使用其中的字符串操作更容易处理。

编辑:

有多种方法可以对数据进行建模(以及数据标准化)。

你也可以这样建模:

Table WhatIsIt
ID Name
1 Sport
2 Food
3 Music

Table WhatUserLikes
ID FK_ID_WhatIsIT FK_ID_Users Description
1 1 2 Handball
2 1 2 Golf
3 2 2 Burgers
4 2 2 Icecream
5 2 2 Yellyfish
6 3 1 ABBA
....

要了解它的作用,比使用不同的食物、运动和音乐表(我可能更喜欢)要复杂一些

关于mysql - SQL 查询查找表和指定条件之间的列列表中的公共(public)项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775525/

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