2010-10-24 70 views
0

我是數據庫結構的新手。我正在嘗試創建一個允許用戶喜歡某些條目的應用,但我希望能夠將喜歡的用戶綁定到用戶,以便我可以在類似操作之前/之後更改視覺效果。檢索從數據庫中綁定到用戶的「likes」

我認爲從研究中我應該有一個'條目'和'用戶'表,然後有一個'喜歡'表將兩者聯繫起來。

我不確定的唯一情況是,當獲取並顯示內容時......我如何編寫查詢?如果我查詢所有我需要的條目,然後回去查看每個條目,看看它是否與當前用戶綁定在一起?這似乎可能是一個代價高昂的操作。有沒有更高效的方法?

希望有道理, 謝謝。

+1

你能提供一些關於你想展示的東西的更多細節嗎?只是一個用戶標記的列表?或者,您是否嘗試構建推薦系統(例如Netflix或Amazon)? – orangepips 2010-10-24 22:56:42

+0

那麼我會列出每個條目,但如果用戶已經喜歡它,那麼類似的按鈕將需要以不同的方式顯示。 (它會顯示爲已經點擊)。所以它不僅僅是一個類似的計數,因爲它可能只是'條目'數據庫中的一列。 – 2010-10-25 00:01:46

回答

1

我認爲你有正確的數據庫設計。至於查詢而言,假設表爲這樣:

用戶

 
ID | Name 
1 | Bob 
2 | Sally 

 
ID | Name 
1 | Red 
2 | Blue 
3 | Yellow 

喜歡

 
UserID | EntryID 
1  | 1 
1  | 2 
2  | 2 
2  | 3 

所以我們可以說鮑勃喜歡紅色和藍色,而莎莉喜歡藍色和黃色。因此,查詢檢索所有條目,加上什麼鮑勃喜歡將是一個指標:

SELECT 
e.ID, 
e.Name, 
l.UserID 
FROM Entries e LEFT JOIN Likes l ON l.EntryID = e.ID 
WHERE l.UserID = 1 -- Bob's User ID 
ORDER BY e.Name 

這將返回

 
ID | Name | UserID 
2 | Blue | 1 
1 | Red | NULL 
3 | Yellow | 1 

的用戶ID列指示鮑勃喜歡的條目或不 - 一個NULL爲否,值爲Yes。

0

我想你可以檢索條目並同時查詢喜歡錶,以獲得當前用戶是否喜歡執行存儲過程的條目。所以你可以控制查詢返回的一組數據的值,例如返回一個列的條目文本和一個布爾列來評估當前用戶喜歡...這樣你至少會有一個存儲過程的參數要表明誰是當前用戶

我希望這個想法幫助ü...

1

假設你有一個列ENTITY_ID(和其他任何你存儲有關的實體)的表項和第二臺UserLikes那包含列user_id和entity_id,您將執行以下操作:

SELECT Entries.col1, Entries.col1 . . ., UserLikes.user_id 
    FROM Entries LEFT OUTER JOIN UserLikes ON 
     Entries.entity_id = UserLikes.entity_id 
    WHERE UserLikes.user_id = :user_id 
     AND Entity.col_whatever = :whatever 

在此示例中,E ntries.col1,Entries.col2。 。 。是您想要獲取有關條目的列的列表。該:user_id是一個參數,其中包含您當前正試圖顯示的用戶的ID。最後一行代表你想要放入的條目返回的任何限制。

此查詢會爲您搜索的每個條目提供一行。您可以檢查返回的列user_id的值。如果它是NULL,那麼用戶不喜歡它,如果它包含用戶的ID,則它被用戶喜歡。