2012-02-20 20 views
2

シナリオ:多対多の関係。ユーザIDとUserChoicheMySQL/PHPでDB関係を検索して保存する

Iは、ユーザの好み、各行に1つずつ格納午前:

表2の列を有しています。 (これは、最も効率的な方法ですか?)

例:

UserID   UserChoiche 

mark                             anna
mark                             paul
mark                             john
john    この例マークで                      mark

3人のユーザを選択し、そしてジョンは1人のユーザを選択しました。

JohnとMarkがお互いを選んだので、このdb関係を見つけるためにPHPが必要です。

指定されたユーザ(この場合はマーク内)
SELECT UserChoiche from exampletable WHERE UserID mark

//の全てchoichesが一致
を見つける選択// PHPのMySQLのクエリ?
ここは私の問題です:私はこれを処理する最も簡単で最も効率的な方法を探しています!

このようなのでしょうか? (それは、仕事ができるが、私は、MySQLの文を書くことができない、私には複雑すぎる!)
If Userchoice of previous query (in this case it would return anna paul and john) EQUALS any Userid in the table (in this case john) AND that Userid has a Userchoiche with the value of the UserID from the previous query (in this example 4th row)
その後、我々は一致が見つかった場合は、ユーザーIDとUserChoicheを取り、どの変数にそれらを保存

//マッチを持っています私は(ので、多分、配列を使用し、多くの試合があることができますか?)一部の通知を行うために使用します

+0

自己結合を探しているようです。この質問を見て:http://stackoverflow.com/questions/1284441/how-does-a-mysql-self-join-work –

答えて

5
SELECT t1.UserID, t2.UserID 
FROM table t1, table t2 
WHERE t1.UserID = t2.UserChoiche 
    AND t2.UserID = t1.UserChoiche 

お互いを選んだ2を吐き出す必要があること。基本的にはテーブル自体に参加して相互関係を見つけることです

2

markと一致するユーザーを返すクエリは次のとおりです。上記のデータがあれば、john

SELECT p2.UserID 
FROM preferences p1 
JOIN preferences p2 
ON p2.UserID = p1.UserChoice 
AND p1.UserChoice = p2.UserID 
WHERE p1.UserID = 'mark' 
+0

私はそれが好きで、それは動作しているようだ(まだテスト中)、しかし、 p1とp2が何であるかを明確にしてください。 –

+0

今、私はすべてを理解し、それは完璧に動作します!ありがとう! –

+0

'p1'と' p2'は[テーブルの別名](http://dev.mysql.com/doc/refman/5.0/en/select.html)です。クエリを書く別の方法は 'FROM preferences as p1'です。これはエイリアスであることがより明白になります。エイリアスでは、2つの異なる省略名で同じテーブルを参照することができました。 –

関連する問題