2012-02-06 18 views
1
TABLE users_community_relations 

list_id int user_id int dest_user_id int 
    1   10   20 
    2   10   24 
    3   10   33 
    4   11   10 

TABLE users_avatar 

avatar_id int user_id int webavatar_thumbnail 
    1   10   test.jpg 
    2   10   test2.jpg 
    3   20   test2.jpg 
    4   20   test11.jpg 

TABLE users 

user_id int nick varchar 
    10   kaka 
    20   caca 
    24   dada 
    33   roro 

は私がから結果を取得するには、ロジックがあり、この3つのテーブルを照会するために、私は例えば= 10 user_idを置くテーブルusers_community_relations wheenを必要とします同じテーブルの列dest_user_id 20,24,33各数字は次の2つのテーブルのuser_idを表しているので、次の2つのテーブルからすべてのデータをdest_user_idカラムの20,24,33の数字に応じて取得する必要があります。時にはテーブルusers_avatarは、このテーブルの文字列が空の場合には、ユーザのアバターを保持しません。時には2行以上を保持することもあります。その場合、最初のものだけを取得する必要がありますが、avatar_id DESC users_avatarテーブルを使用して注文します。3つのテーブル、最初のテーブルに応じて2番目と3番目のテーブルからすべての結果(mysqlの)

答えて

0

これは動作するはずです:それは使用しています

SELECT ucr.*, u.*, ua1.* 
FROM users_community_relations ucr 
LEFT JOIN users u 
    ON u.user_id = ucr.user_id 
LEFT JOIN users_avatar ua1 
    ON ua1.user_id = u.user_id 
LEFT JOIN users_avatar ua2 
    ON ua2.user_id = u.user_id AND ua2.avatar_id > ua1.avatar_id 
WHERE ua2.avatar_id IS NULL 

にはアバターが存在しない場合、我々は唯一の最高avatar_idまたはNULLでuser_avatar行を返すことを確認するために結合します。

+0

thx、それはうまく動作します – Cameleon

関連する問題