1

だから、私はこのMySQLの問題を抱えています。

私はLEFTJOIN、INNER JOINなどを見てきました。そして、私が理解しているように、LEFT JOINは左から結合し、右の部分が存在しない場合、その値はNULLに設定されます。また、INNER JOINを使用すると、結合に一致するものがない場合、空のセットが返されます。

前のステートメントからわかるように、試合に参加したユーザーの1人のさまざまな統計などに参加します。しかし、uid2がuid1と友達ではない場合、私の場合、友達のすべてのフィールドでnullが発生します。*

友達が友達で、友達がいない場合は、友達のフィールドをすべて取得するにはどうすればfriendsよいですか。(彼らが友達かどうかを確認する前に、別のステートメントを実行したくありません)。

これは私の以前のstatemenetです:

SELECT matches.*, statistics.*, friends.*, users.username
FROM `matches`
LEFT JOIN statistics ON matches.uid1=statistics.uid
LEFT JOIN users ON matches.uid1=users.uid
LEFT JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid
WHERE matches.mid IN (269,231,131)
4

2 に答える 2

1

LEFT JOIN次に、最後をINNER JOIN:に置き換えます。

SELECT matches.*, statistics.*, friends.*, users.username
FROM `matches`
LEFT JOIN statistics ON matches.uid1=statistics.uid
LEFT JOIN users ON matches.uid1=users.uid
INNER JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid
WHERE matches.mid IN (269,231,131);

ただし、friends結合できない場合は、テーブルから列を選択的に返さないようにすることはできません。

于 2012-06-02T08:33:09.030 に答える
0

結局、LEFT JOINを実行し、結果をフィルタリングしました。

$temp =  array_filter($temp, "is_not_null");

function is_not_null($var)
{
    return ! is_null($var);
}
于 2012-06-02T11:43:15.900 に答える