0

データベースに、4つの値AKA...を持つリレーションシップテーブルがあります。

id, int, primary, auto-incriment 
mem1, int
mem2, int
type, enum('a','b')

メンバーID、ユーザー名、名、姓を持つ別のテーブルもあります

ボタンをクリックして、重複することなく2人の関係を取得したいと思います。これが私がこれまでに持っているクエリです...

SELECT 
    myMembers.id AS id, 
    myMembers.username AS username, 
    myMembers.firstname AS firstname,
    myMembers.lastname AS lastname 
FROM myMembers 
INNER JOIN memberRelations 
    ON memberRelations.mem2=myMembers.id
WHERE memberRelations.mem1='$id' OR memberRelations.mem2='$id' ORDER BY myMembers.username 
ASC

ここでの問題は、一部のユーザーでは正しい値が表示されますが、他のユーザーではプロファイルユーザーが表示され、他のメンバーの関係は表示されないことです。これはクエリのON部分に関係していると思いますが、正直なところ私は迷子になっています。私の目標を達成するためのより良い方法はありますか?または、クエリの内容を修正できますか?どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

あなたの質問に基づいて、関係の両方のメンバーを選択する次のものが必要だと思います:

SELECT
    R.type,
    M1.id AS id1, 
    M1.username AS username1, 
    M1.firstname AS firstname1,
    M1.lastname AS lastname1,
    M2.id AS id1, 
    M2.username AS username2, 
    M2.firstname AS firstname2,
    M2.lastname AS lastname2
FROM memberRelations AS R
       INNER JOIN myMembers AS M1 ON R.mem1=M1.id
       INNER JOIN myMembers AS M2 ON R.mem2=M2.id
WHERE R.mem1='$id' OR R.mem2='$id'
于 2012-07-20T00:25:28.380 に答える