2015-07-01 39 views
0

我有一個表,該表包含很多項目,很多用戶轉換表數據庫MySQL的

下面是表

  ------------------------------------------ 
      | Item1 | Item2 |  Item3 | 
----------------------------------------------------- 
| U1like |  1  |  0  |  0  | 
----------------------------------------------------- 
| U1dislake|  0  |  1  |  1  | 
----------------------------------------------------- 
| U2like |  1  |  1  |  1  | 
----------------------------------------------------- 
| U2dislike|  0  |  0  |  1  | 
----------------------------------------------------- 

1和0的布爾值。這意味着1表示Userx對該項目評級,0表示​​對Usex未評級該項目。

例如:

U1like額定ITEM1爲1,單元U1的額定的Item1像

U2dislike額定的項目3是1,指U2額定項目3爲反感

U1like額定項目2是0,意味着U1沒有評分

我不知道如何將其轉換爲數據庫。有人能幫我嗎? 謝謝

+2

你的問題到底是什麼? – frlan

回答

0

我想你,你存儲用戶的表(讓我們將其命名爲用戶提供了),每個用戶有一個ID。因此,您還有另一個帶有ID的項目(ITEMS)。

所以,你必須創建一個表USER_VOTES類似如下:

CREATE TABLE USER_VOTES(
ID INT AUTO_INCREMENT, 
USER_ID INT, 
ITEM_ID INT, 
VOTE BOOLEAN, 
PRIMARY KEY(ID), 
KEY(USER_ID), 
KEY(ITEM_ID), 
KEY(USER_ID,ITEM_ID)); 

如果一個用戶投票,你可以插入到這個表或者你可以檢查與select語句進行表決。

SELECT VOTE FROM USER_VOTES WHERE (USER_ID=1) AND (ITEM_ID=2); 

如果你想看到所有的票,您可以輕鬆地從中總結:

SELECT ITEM_ID, SUM(VOTE) FROM USER_VOTES GROUP BY ITEM_ID ORDER BY ITEM_ID; 

爲了有喜歡和不喜歡分離,使用:

SELECT ITEM_ID, SUM(IF(VOTE=1,1,0)) AS "Likes", SUM(IF(VOTE=0,1,0)) AS "DisLikes" 
FROM USER_VOTES GROUP BY ITEM_ID ORDER BY ITEM_ID; 

或者你也可以加入用USERS和ITEMS表得到你想要的:

SELECT USERS.NAME, ITEMS.NAME, USER_VOTES.VOTE FROM 
USER_VOTES 
LEFT JOIN USERS ON (USERS.ID=USER_VOTES.USER_ID) 
LEFT JOIN ITEMS ON (ITEMS.ID=USER_VOTES.ITEM_ID) 
ORDER BY USERS.NAME; 
0

創建多個表

  • 用戶
  • 評級
  • 項目

用戶包含用戶信息和唯一ID

評級包含用戶id,的itemId和評級,評級值可以爲0,不喜歡1,對於1 IKE

項目包含項目信息和唯一ID