[英]Newsletter Categories in one row like 1,2 - Mysql Simple Database Design
我正在使用一個簡單的新聞稿腳本,其中一個用戶可以使用不同的類別。 但我想像1,2,3這樣一排地得到不同的類別
表格:
newsletter_emails
id email category
1 test@test.com 1
2 test@test.com 2
newsletter_categories
id name
1 firstcategory
2 secondcategory
但是Iam尋找的是這樣的:
newsletter_emails
user_id email category
1 test@test.com 1,2
2 person@person.com 1
最好的解決方案是什么?
PS:用戶可以在個人資料頁面上選擇自己的類別。 (也許使用Mysql Update?)
SQL和關系數據模型並不是專門針對這種情況而制作的。 您可以執行以下任一操作:
在第一個表上使用簡單的SELECT
查詢,然后在使用的代碼中遍歷結果,從第二個表中獲取相應的行,並將它們組合成字符串(您的操作方式完全取決於您使用的語言使用)
在兩個表上都使用JOIN
,迭代結果集並累積表2中的值,只要表1中的ID保持不變即可。 這比第一種解決方案更難編碼,並且從數據庫中提取的結果集更大,但是您只需一個查詢就可以擺脫困境。
使用特定於DBMS的SQL標准擴展(例如GROUP_CONCAT
)來實現此目的。 您將獲得所需的確切信息,但是您的SQL查詢將不會那么容易移植。
試試這個(完全未經測試):
SELECT id AS user_id, email, GROUP_CONCAT(category) AS category FROM newsletter_emails GROUP BY email ORDER BY user_id ASC;
這是一個多對多關系的案例。 而不是用逗號分隔類別ID,而是在newsletter_emails和newsletter_categories(例如user_category)之間建立具有以下模式的關聯表:
user_id category
1 1
1 2
2 1
這樣,如果用戶取消訂閱類別,則無需進行字符串處理。 您只需要從user_category表中刪除該行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.