我需要创建一个查询,根据用户喜欢的内容以及喜欢的其他人喜欢的内容向用户推荐艺术家。希望你能明白。
无论如何,有问题的表格是成员(自我解释)和艺术家关注(哪些成员跟随谁)。我稍后会将此查询添加到更大的查询中,该查询还将从该 ID 的艺术家表中获取艺术家信息。
到目前为止,这是我所拥有的,我已将其用作2
成员的模拟 ID。
SELECT
M.ID AS M_ID,
F.ID AS F_ID,
F.follows_ID
FROM members M
LEFT JOIN artist_follows F
ON F.ID = M.ID
WHERE M.ID ='2'
我意识到它根本不是很多,但它是我所能得到的,因此我为什么来到这里。
以下是需要做的事情的细分:
1:从成员表中获取 ID。
2: 通过成员ID从artist_follows中获取follows_ID(用户关注的人)
3:获取会员关注的人的ID。(为了下一点的目的,将此称为“其他成员 IDS”)。
4:从“其他会员IDS”获取其他艺人ID,确保会员已经关注的艺人不被选中。
希望像那样分解它有帮助!
更新!
让我们按照建议的方式获取一些模拟数据。假设该成员2
使用 IDS 关注艺术家3
。另一个成员 ( 4
)3
也随之而来20
。因此查询的结果应该是20
架构:
艺术家_关注;
CREATE TABLE `artist_follows` (
`ID` int(11) NOT NULL,
`follows_ID` int(11) NOT NULL,
KEY `fav_ID` (`ID`),
CONSTRAINT `fav_ID` FOREIGN KEY (`ID`) REFERENCES `artists` (`ID`),
CONSTRAINT `ID` FOREIGN KEY (`ID`) REFERENCES `members` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
会员;
CREATE TABLE `members` (
`ID` int(111) NOT NULL AUTO_INCREMENT,
`email` varchar(100) COLLATE latin1_general_ci NOT NULL,
`password` varchar(100) COLLATE latin1_general_ci NOT NULL,
`FNAME` varchar(100) COLLATE latin1_general_ci NOT NULL,
`SURNAME` varchar(100) COLLATE latin1_general_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci