我需要创建一个查询,向用户建议艺术家取决于他们喜欢什么以及其他喜欢他们喜欢什么的人。希望你明白。mysql - 创建一个“建议艺术家关注”查询
无论如何,有问题的表是成员(自我解释)和artist_follows(哪些成员跟随谁)。稍后我会将此查询添加到更大的查询中,该查询还将从艺术家表中获取该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:获取follows_ID(用户遵循谁)从artist_follows使用会员ID
3:获取的谁遵循以下成员的人谁IDS。 (为了下一点的目的,称这个“其他成员IDS”)。
4:从“其他成员IDS”获取其他艺术家IDS,确保未选中该成员已经关注的艺术家。
希望把它打破,就像帮助!
更新! 让我们有一些模拟数据,然后建议。可以说会员2
跟随艺术家与IDS 3
。另一个成员(4
)跟在3
以及20
之后。因此,查询的结果应该是20
模式:
artist_follows;
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
能否请您发布两个表的结构和一些样本数据,什么是理想的结果,从这个样本数据? –
F.ID是会员的ID和F.follows_ID是艺术家的ID吗? –
@DavidGrenier是的正确 –