[hackers-jp: 228] 問い合わせのSQL文

Shimizu Hiroko h.shimizu @ iqnet.co.jp
2007年 5月 18日 (金) 13:47:20 JST


はじめて質問いたします。

postgre7.4使用しています。

はやりのSNSで、友達リストを出すのですが、
自分ニックネーム(友達数)と友達の(友達数)と友達の友達の(友達数)
という内容にしたいと思っています。

テーブルは

メンバーテーブル
user_id name del_flg
1 A f
2 B f
3 C f
4 D f
5 E f
6 F f

フレンドテーブル
1行目はフレンド申請を行ったメンバーがfrom、受けたメンバーがto、
2行目はそれが逆の一対データです
id_a id_b permission_flg del_flg
1 2 t f
2 1 t f
3 2 t f
2 3 t f
2 5 t f
5 2 t f
5 4 t f
4 5 t f
1 6 t f
6 1 t f
です。

SQL文は

SELECT
ta_nember.user_id,
name,
friend_cnt,
friend_cnt2,
friend_cnt3,
FROM
ta_user
LEFT JOIN
(SELECT
a.id_a,
count(a.id_a) AS friend_cnt
FROM
ta_friend AS a
WHERE
a.del_flg = 'f' AND
a.permission_flg = 't'
GROUP BY
a.parent_id
) AS a
ON a.parent_id = ta_member.user_id AND ta_member.del_flg = 'f'

LEFT JOIN
(SELECT
e.user_id,
count(e.user_id) AS friend_cnt2
FROM
ta_friend AS a
INNER JOIN ta_friend AS b ON a.user_id = b.parent_id AND b.user_id =
a.parent_id
INNER JOIN ta_member AS c ON b.parent_id = c.user_id
(SELECT
ta_friend.user_id,
ta_friend.parent_id,
ta_friend.del_flg
FROM
ta_friend
I INNER JOIN ta_member ON ta_friend.parent_id = ta_user.user_id
WHERE
ta_user.del_flg = 'f' AND
ta_friend.del_flg = 'f' AND
)
WHERE
e.del_flg = 'f' AND
e.permission_flg = 't'
GROUP BY
e.user_id
) AS e
ON b.parent_id = ta_member.user_id AND ta_user.del_flg = 'f'

と書いたのですが、結果が得られません。

どなたかアドバイスをお願いできましたら幸いです。
よろしくおねがいします。



hackers-jp メーリングリストの案内