2012-02-23 61 views
2

例如,10個結果從MySQL表products顯示,並且每個產品具有像和不喜歡按鍵。如果用戶按喜歡或不喜歡,voted表更新。檢查用戶是否投了票的正確方法是什麼?

現在我遇到麻煩了什麼:什麼是檢查,如果用戶已經投票或不正確的方式?要存儲什麼如果產品已被投票贊成或不喜歡?

如果有300個結果,我不想做300個查詢來檢查voted表,如果存在productiduserid。這樣做的正確方法是什麼?我仍然想顯示結果,只是如果用戶投了票,就不喜歡或不喜歡按鈕。

+0

這取決於你的表結構,發佈'SHOW CREATE TABLE voteed'的輸出會幫助 – 2012-02-23 10:25:24

+0

'voteed'看起來像什麼樣,你的「300結果」是怎麼樣的?您試圖將用戶投票支票添加到哪個查詢? – Naltharial 2012-02-23 10:26:46

+0

投票有3列(id,userid,productid)。用戶標識和產品標識具有唯一的約束。產品表中的300個結果具有列(id,內容),每個結果都有一個喜歡或不喜歡的按鈕。我想要做的是,如果用戶投票不顯示喜歡和不喜歡按鈕。 – user892134 2012-02-23 10:27:57

回答

4

表A存儲的產品,例如

id | product | 

表B存儲用戶投票,例如,

id | user_id | product_id | vote (like/dislike) 

然後,你可以做一個簡單的連接查詢

SELECT `A`.`id`, `A`.`product`, `B`.`vote` from `A` LEFT JOIN `B` on `A`.`id` = `B`.`product_id` WHERE `B`.`user_id` = $current_user_id_value; 

那麼結果集類似這樣

id | product | vote | 
1 | "product 1" | NULL | 
2 | "product 2" | like | 
3 | "product 3" | dislike | 
4 | "product 4" | NULL | 
... 
3

使用left outer join添加投票錶行,其中用戶標識與當前用戶匹配,產品標識與產品表中的產品標識匹配到結果集。

+0

我仍然想要顯示結果,只是不喜歡和不喜歡按鈕。 – user892134 2012-02-23 10:26:20

+0

然後存儲投票值,例如作爲枚舉。 – hakre 2012-02-23 10:32:27

+0

確實。結果應存儲在投票表中(它至少有三列,例如:用戶,產品和分數) – Quentin 2012-02-23 10:34:23

-1

你可以使用內存緩存,具有存儲與您爲關鍵=>值對的值,

鍵可以是「PRODUCT_ID + USER_ID」,當曾經發生任何變化,更新數據庫以及內存緩存。

+0

Memcache並不是特別需要此功能。第二個表也完成這項工作。 – hakre 2012-02-23 10:31:57

0

最簡單的設置是爲用戶和他們已經投產品的cookie。當然,用戶可以刪除他們的cookies並重新投票。

一貫的方式是你所描述的一個,節省了一排每productIduserId。無需查詢多次,但是,你只需要做SELECT count(productID) WHERE productId=1 and userId=42

您可以選擇,其中包括不同的場景,一致性和性能之間。也許另一個數據庫引擎將是最好的選擇,連同cookie。

+1

最簡單的是使用左連接。 :) – 2012-02-23 10:33:06

0

我有一個奇怪的解決方案:)

  1. 在產品表中創建一個名稱爲的字段3210,類型斑點(或文本)
  2. 保存在像陣列的投票用戶:

    $votes = array( 1 => true, // userId => like/dislike (true/false) );

  3. 使用serialize & unserialize與對象$votes(場vote)加載或投票用戶保存到你數據庫。還有不到1輪thounsand用戶對產品的投票中,votes領域是可以接受我猜:)

  4. 然後你可以檢查用戶是否被isset($votes[$userId])投票,喜歡或不喜歡小:

    if (isset($votes[$userId])) if ($votes[$userId] == true) echo 'like'; else echo 'dislike';

因爲你用PHP來檢查所以執行時間並不重要。

希望這會有所幫助!

相關問題