【问题标题】:Retrieve another data from mySQL for item recommendation从 mySQL 检索另一个数据以进行项目推荐
【发布时间】:2015-04-09 15:36:34
【问题描述】:

基本上我目前正在为我的网站做一个推荐系统

我在 mySQL 数据库中有 4 个表:

用户

  • 用户ID
  • 用户名
  • 密码
  • 用户级别

类别

  • 类别ID
  • 类型

项目

  • 项目ID
  • 姓名
  • 价格
  • 数量
  • 类别ID
  • 说明

交易

  • 交易ID
  • 类别ID
  • 项目ID
  • 用户ID

这就是我想要的工作方式,

userID 1(Kyle)购买了笔记本电脑(ItemID 1)、鼠标(ItemID 2)和电池(ItemID 4)

userID 2(Steven) 购买了笔记本电脑(itemID 1)

userID 3(Jonathan) 购买了 Mouse(ItemID 2)、Battery(ItemId 4) 和 Mousepad(ItemID 3)

我希望系统将 itemID 2(Mouse)、itemID4(Battery) 和 ItemID 3(Mousepad) 推荐给 userID 2(Steven)

  • 事务表将记录所做的任何事务。

非常感谢您提供的任何帮助。谢谢

【问题讨论】:

  • 你能不能给我们更多的测试数据,让你的问题更清楚......
  • 已经先生..我真的不知道如何实现这一点...非常感谢您的帮助谢谢

标签: php mysql


【解决方案1】:

查询所做的是获取购买了ItemID=2 的所有UserID's。然后获取这些用户的ItemID 树枝。然后应用过滤器从结果中删除ItemId =2。试试这个。

Select distinct ItemID 
FROM transaction 
where UserID IN (Select userID FROM Transaction where itemID = 2 ) 
AND ItemID <> 2

【讨论】:

  • 您好先生,感谢您的帮助我能问您一件事,是用来做什么的?谢谢
  • 这样就不会选择相同的ItemID,在这种情况下是2。即Not Equal to操作员。
  • 哦,我明白了,谢谢先生!我会尝试查询,谢谢!
  • 先生,您知道如何根据 3 个人或更多人创建推荐吗?我已经更新了问题,谢谢!
【解决方案2】:

像这样

SELECT
    i.itemID,
    i.name,
    u.username
FROM transaction
    INNER JOIN user u ON (u.userID = t.userID)
WHERE u.userID = 2

然后您必须使用您的语言将结果转换为可读的行。

否则,您必须寻找“PIVOT”才能将多个购买的物品(多行)转换为一行。

另一种解决方案是使用带有 mssql 的事务,允许解析结果并返回单行。

【讨论】:

  • 这应该如何给 OP 他想要的东西。您当前的查询不会给出 OP 想要的输出。在将其作为答案发布之前检查查询。
  • 您好,先生,感谢您的回复,我对您的“i”和“u”感到困惑。这实际上是什么意思??谢谢
  • 我知道 OP 想要一个特定用户进行的交易列表。他想要别的东西吗? @Foster:您在两个(事务和用户)表中都放置了相同的字段“userID”。查询时,您必须向数据库指定使用此字段时要定位的表。
  • 啊……我明白了,先生……现在很清楚了,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2012-03-13
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2013-08-26
  • 2016-06-23
  • 2010-11-24
相关资源
最近更新 更多