0

PHPとMySQLでバディシステムを作っているのですが、少し戸惑っています。3 つの列を持つ「仲間」というテーブルがあります。ユーザー 1、ユーザー 2、保留中。User1 は 2 人のバディのうちの 1 人になり、user2 はもう 1 つのバディになります。「保留中」は「真」または「偽」のいずれかになります。

次に、Web ページにユーザーを表示する必要があります。自分のユーザーではない列 (user1 または user2) のみを選択するにはどうすればよいですか。私の現在のコードは

$sql="SELECT * FROM buddies WHERE user1='$username' OR user2='$username' AND pending='1'";

$query = mysql_query($sql);

明らかに、ユーザー自身のユーザーとバディも表示されます。どうすればこれを修正できますか?

4

3 に答える 3

3

ユニオンを使用できます:

SELECT user1 from buddies WHERE user2 = '$username' UNION SELECT user2 FROM buddies WHERE user1 = '$username'

これにより、自分のユーザーが user2 にあるすべてのレコードから user1 が選択され、その逆も同様で、リストが連結されます。

(注: UNION キーワードを使用してからしばらく経っているので、正確な構文を再確認することをお勧めします。)

于 2012-05-16T23:35:37.847 に答える
0

PHP で結果をループすると (仲間を表示するため)、$username と等しくないものだけが表示されます。

于 2012-05-16T23:39:14.903 に答える
0

次のように MySQL の「if」関数を使用するのはどうですか。

SELECT IF(user1 = '$username', user2, user1) AS buddy
FROM buddies
WHERE user1 = '$username' OR user2 = '$username'

次に、それらの仲間の他のユーザー データを取得したい場合 (おそらく、より詳細なユーザー テーブルがあると思われます)、次のように取得できます。

SELECT u.*
FROM (
    SELECT IF(user1 = '$username', user2, user1) AS buddy
    FROM buddies
    WHERE user1 = '$username' OR user2 = '$username'
) AS b
LEFT JOIN users AS u
    ON b.buddy = u.username
于 2012-05-17T00:22:57.840 に答える