2017-02-28 13 views
-2

私はMySQLの初心者です。私はmysqlのいくつかのコースを終了しました。教師が提供する宿題がありますが、ソーシャルネットワークサイトのベース。私は、JOINの基礎を理解し、私はまだトラブルJOINをLEFTのロジック、JOINまたは他のタイプINNERを理解している...LEY JOINのMysqlリクエストSELECT

ここに私の問題であり、私は2つのテーブルを持つデータベースを持って、

member(id_member*, login, photo) 
friend(id_member_request*, id_member_accept*, accept, date_acceptation) 

friendテーブルのacceptフィールドは、値が0ではなく1に設定されている友達がいるかどうかを検証できるフィールドです。

フィールドid_member_requestとid_member_acceptはメンバーテーブルのid_memberに同意します。

友人であるメンバーのログインと画像を取得して、それらを表示できるようにしたいと考えています。

私はいくつかのクエリをテストした:

SELECT m.login 
    , m.photo 
    FROM friend AS a 
    LEFT 
    JOIN member AS m 
    ON m.id_member = a.id_member_accept 
    LEFT 
    JOIN member AS m1 
    ON m1.id_member = a.id_member_request 
WHERE accept = 1; 

クエリは動作しますが、すべての友好のメンバーも何回か何人かの人々は表示されません。

In RIGHT JOIN結果はNULLです。 INNER JOINでは結果はありません。

私は数時間ブロックしたので、事前に感謝し、私は少し自分を失うことを告白します。 ;-)

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

答えて

1

ステートメントのフォーマットはあなたに役立ちます:) さて、mとm1の両方で同じ列に参加しています。これは、とのメンバーの友人のすべてのためのm.photoをm.loginを持ち帰るさ

DECLARE INT @MEMBERID = 2; --Example ID 

SELECT m.login, m.photo 
FROM friend AS a 
LEFT JOIN member AS m ON m.id_member = a.id_member_accept 
WHERE a.id_member_request = @MEMBERID 
    AND a.accept = 1; 

..

次のようにデータを戻すことが、しかし、あなたはid_member_requestに合格する必要がありID @メンバー番号。私はあなたがログインしている人の友人をしたいと思います

0

は。ここでは特にMEMBER_IDするための手段あなた1友達

0

を表示されますあなたの会員IDで

select * from friend a 
inner join member b on (a.id_member_request=b.id_member or a.id_member_accept=b.id_member) and b.id_member=1 
where accept=1 

役立ちますクエリですSQL fiddle

に以下の例のように

SELECT `m`.`id_member` AS `memberID`, 
     `m`.`login` AS `memberLoginName`, 
     `m`.`photo` AS `memberPhoto`, 
     `m1`.`id_member` AS `friendID`, 
     `m1`.`login` AS `friendLoginName`, 
     `m1`.`photo` AS `friendPhoto`, 
     `a`.`accept_date` AS `acceptDate` 
FROM `friends` AS `a` 
INNER JOIN `member` AS `m` ON `a`.`id_member_request` = `m`.`id_member` 
INNER JOIN `member` AS `m1` ON `a`.`id_member_accept` = `m1`.`id_member` 
WHERE `a`.`accept`=1 
ORDER BY `a`.`id_member_request`,`a`.`id_member_accept` ASC 

ビューこの例のクエリを再作成することもでき

0

私はすべてのあなたの答えを試みたし、ほとんど変化して、この1つはさえINNER、LEFTで正常に動作し、RIGHT JOINのあなたの助けのおかげでたくさんの;-)

...

SELECT login,photo 
FROM friend AS a 
INNER JOIN member AS m ON (a.id_member_request = m.id_member 
OR a.id_member_accept = m.id_member) 
WHERE m.id_member !=$id_member 
AND a.accept=1;