2015-07-01 40 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