2

ユーザーが好きなものと、好きなものが好きな他の人に応じて、アーティストをユーザーに提案するクエリを作成する必要があります。あなたがそれを手に入れることを願っています。

とにかく、問題のテーブルは members (自明) と 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: 会員IDでartist_followsからfollows_ID(フォローしているユーザー)を取得する

3:メンバーがフォローしている人のIDSを取得します。(次の目的で、これを「他のメンバー IDS」と呼びます)。

4:「他のメンバーIDS」から他のアーティストIDSを取得し、そのメンバーがすでにフォローしているアーティストが選択されていないことを確認します。

それが助けになったようにそれを分解することを願っています!

アップデート! 提案されているように、いくつかのモックデータを用意しましょう。メンバー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
4

2 に答える 2

1
SELECT DISTINCT new.follows_ID
FROM artist_follows fan
INNER JOIN artist_follows other ON other.follows_ID = fan.follows_ID
INNER JOIN artist_follows new ON new.ID = other.ID
WHERE new.follows_ID NOT IN
    (SELECT follows_ID FROM artist_follows WHERE ID = fan.ID )
AND fan.ID = 2;
于 2012-10-22T22:23:24.820 に答える
1

SQL フィドル

create table `members` (
    `id` int(111) not null auto_increment,
    primary key (`id`)
);
create table `artist_follows` (
    `id` int(11) not null,
    `follows_id` int(11) not null,
     constraint `id` foreign key (`id`) references `members` (`id`)
);
insert into members (id) values (2), (4);
insert into artist_follows (id, follows_id) values
(2, 3),
(4, 3),
(4, 20);

select distinct f3.follows_id follows
from
    members m
    inner join
    artist_follows f1 on f1.id = m.id
    inner join
    artist_follows f2 on f1.follows_id = f2.follows_id
    inner join
    artist_follows f3 on f2.id = f3.id 
where
    m.id = '2'
    and
    f3.follows_id not in (
        select follows_id
        from artist_follows
        where id = f1.id
    )
于 2012-10-22T23:05:48.230 に答える