簡體   English   中英

一類的通訊類別,例如1,2-Mysql Simple Database Design

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM