簡體   English   中英

如何使用MySQL和PHP在數據庫中的用戶之間存儲相關值?

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

等等。 但我不喜歡這種方法,因為

  • 它存儲兩次值; 例如,user1和user3之間的相關性存儲在第1行第3列以及第3行第1列中。
  • 我使用預准備語句,這意味着我不能選擇以用戶ID命名的列,除非我將用戶ID連接到SQL語句中,這顯然不是理想的。

我有什么選擇? 如果這可以在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 * * * *
  1. 在上述矩陣AA中,BB,CC,DD和EE是沒有意義的。
  2. 為避免重復,AB與BA相同。 CD與DC相同,依此類推。

您可以通過這種方式將三角形數據集保存在面向表的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.

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