[英]How do I store correlation values between users in a database using MySQL and PHP?
我正在嘗試為一個網站創建用戶數據庫,該網站將存儲所有用戶之間的相關值。 我的意思是,對於每對用戶,兩個用戶之間存在相關的存儲值。
將使用相關算法通過PHP計算相關值。 我的問題是將它們存儲在MySQL數據庫中的最正確方法是什么? 我意識到我可以制作這樣一張桌子:
---------------------------------
| user1 | user2 | user3 | etc... |
-----------------------------------------
| user1 | #val | #val | #val | #val |
-----------------------------------------
| user2 | #val | #val | #val | #val |
-----------------------------------------
| user3 | #val | #val | #val | #val |
等等。 但我不喜歡這種方法,因為
我有什么選擇? 如果這可以在MySQL中完成,我該怎么做呢?
如果在MySQL中無法做到這一點,我是否應該嘗試學習其他數據庫類型? 例如,我意識到圖形數據庫系統可能適用於此,但我不想花時間學習如何使用圖形數據庫,如果這可以在MySQL中完成。
通常,您會在JOIN表中執行類似的操作。 因此,假設您有一個users
表,其中包含user_id
字段以及您需要的任何其他字段。 您可以構建一個名為user_relations
或類似的表,它只有兩個user_id外鍵字段,這些字段會以某種方式關聯用戶。
user_id_1 | user_id_2
------------------------
1 | 2
1 | 3
2 | 1
3 | 1
... | ...
然后,您將在兩列中都有一個復合主鍵,以強制實現唯一性。 請注意,我假設您在問題中提到的#val
只是某種表示關系存在的標志(1/0)。 如果您確實需要該值來解釋關系的某些內容(即父/子或其他有意義的值),那么您可以在此表中添加第三列以存儲與該關系相關聯的值。
當您需要跨關系查詢時,您可以這樣做:
SELECT u1.*, u2.*
FROM
users AS u1
INNER JOIN user_relations AS ur
ON u1.user_id = ur.user_id_1
INNER JOIN users AS u2
ON ur.user_id_2 = u2.user_id
WHERE u1.user_id = ? /* or whatever filter you may need to apply */
請注意,根據您嘗試表示的關系類型(即雙向關系),您可能需要在表中使用兩行來表示每個關系。 這樣,您始終可以使用第一列查找第二列中的所有相關用戶。 這在上面的示例中顯示,其中用戶1的關系在樣本行值中的兩個方向上顯示。
很棒的問題。
給定用戶A,B,C,D和E,您的數據集是三角形;
A B C D E
A
B *
C * *
D * * *
E * * * *
您可以通過這種方式將三角形數據集保存在面向表的SQL數據庫中;
id usr usr c
------------
0 A B 1
1 A C 5
2 A D 3
3 A E 4
4 B C 3
等等
在我看來,最好的解決方案是擁有2個表...用戶和用戶關系
UserRelations:
====================================
User1Field | User2Field | ValueField
====================================
#User | #User | #val
------------------------------------
#User | #User | #val
------------------------------------
#User | #User | #val
------------------------------------
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.