我有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