例如,10個結果從MySQL表products
顯示,並且每個產品具有像和不喜歡按鍵。如果用戶按喜歡或不喜歡,voted
表更新。檢查用戶是否投了票的正確方法是什麼?
現在我遇到麻煩了什麼:什麼是檢查,如果用戶已經投票或不正確的方式?要存儲什麼如果產品已被投票贊成或不喜歡?
如果有300個結果,我不想做300個查詢來檢查voted
表,如果存在productid
和userid
。這樣做的正確方法是什麼?我仍然想顯示結果,只是如果用戶投了票,就不喜歡或不喜歡按鈕。
例如,10個結果從MySQL表products
顯示,並且每個產品具有像和不喜歡按鍵。如果用戶按喜歡或不喜歡,voted
表更新。檢查用戶是否投了票的正確方法是什麼?
現在我遇到麻煩了什麼:什麼是檢查,如果用戶已經投票或不正確的方式?要存儲什麼如果產品已被投票贊成或不喜歡?
如果有300個結果,我不想做300個查詢來檢查voted
表,如果存在productid
和userid
。這樣做的正確方法是什麼?我仍然想顯示結果,只是如果用戶投了票,就不喜歡或不喜歡按鈕。
表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 |
...
使用left outer join添加投票錶行,其中用戶標識與當前用戶匹配,產品標識與產品表中的產品標識匹配到結果集。
我仍然想要顯示結果,只是不喜歡和不喜歡按鈕。 – user892134 2012-02-23 10:26:20
然後存儲投票值,例如作爲枚舉。 – hakre 2012-02-23 10:32:27
確實。結果應存儲在投票表中(它至少有三列,例如:用戶,產品和分數) – Quentin 2012-02-23 10:34:23
你可以使用內存緩存,具有存儲與您爲關鍵=>值對的值,
鍵可以是「PRODUCT_ID + USER_ID」,當曾經發生任何變化,更新數據庫以及內存緩存。
Memcache並不是特別需要此功能。第二個表也完成這項工作。 – hakre 2012-02-23 10:31:57
最簡單的設置是爲用戶和他們已經投產品的cookie。當然,用戶可以刪除他們的cookies並重新投票。
一貫的方式是你所描述的一個,節省了一排每productId
和userId
。無需查詢多次,但是,你只需要做SELECT count(productID) WHERE productId=1 and userId=42
您可以選擇,其中包括不同的場景,一致性和性能之間。也許另一個數據庫引擎將是最好的選擇,連同cookie。
最簡單的是使用左連接。 :) – 2012-02-23 10:33:06
我有一個奇怪的解決方案:)
保存在像陣列的投票用戶:
$votes = array( 1 => true, // userId => like/dislike (true/false) );
使用serialize
& unserialize
與對象$votes
(場vote
)加載或投票用戶保存到你數據庫。還有不到1輪thounsand用戶對產品的投票中,votes
領域是可以接受我猜:)
然後你可以檢查用戶是否被isset($votes[$userId])
投票,喜歡或不喜歡小:
if (isset($votes[$userId])) if ($votes[$userId] == true) echo 'like'; else echo 'dislike';
因爲你用PHP來檢查所以執行時間並不重要。
希望這會有所幫助!
這取決於你的表結構,發佈'SHOW CREATE TABLE voteed'的輸出會幫助 – 2012-02-23 10:25:24
'voteed'看起來像什麼樣,你的「300結果」是怎麼樣的?您試圖將用戶投票支票添加到哪個查詢? – Naltharial 2012-02-23 10:26:46
投票有3列(id,userid,productid)。用戶標識和產品標識具有唯一的約束。產品表中的300個結果具有列(id,內容),每個結果都有一個喜歡或不喜歡的按鈕。我想要做的是,如果用戶投票不顯示喜歡和不喜歡按鈕。 – user892134 2012-02-23 10:27:57