我有3个表:videos
,categories
,video_categories
。咨询加盟查询
在videos
,我有ID,标题等领域。 在categories
,我有id和名字。 在video_categories
中,我有id,video_id和category_id。
一个视频可以有多个类别。所以video_categories表就是这样的。
id video_id category_id
1 1 1
2 1 2
3 1 3
如果我想要一个视频列表并显示它们的类别,哪一个会是首选?
通过PHP,调用1查询获取所有视频,然后循环查询以获取每个视频的类别,并通过另一个查询获取类别名称。如果桌子很大,这会很慢,对吧?
通过MySQL的连接(需在此帮助)。如果我将加入视频留给video_categories,则会有同样video_id的3个结果。我可以使用GROUP BY或SELECT DISTINCT来获得唯一的结果,但我现在如何获取类别的名称?
我预期的结果将是这样的:
id title categories
1 Video1 pop, rock, jazz
我不认为你的问题与非规范化,本身做的。正如您所描述的,您的模式已完全标准化,这意味着它没有冗余数据。你可以通过添加'categories'列到'videos'表,在其中你将存储的类别名称的逗号spearated字符串非规范化它(例如,“流行,摇滚,爵士”),然后用冗余保持同步数据在'categories'和'video_categories'表中。就目前而言,您的问题实际上只是询问如何优化您的连接技术,可以使用'group_concat'方法来完成,正如其他人所说的。 –
是的,我感到困惑。我一定认为非规范化是规范化的逆过程,它是读取和显示规范化的模式。我已编辑标题以避免混淆 – Henson