0

MySQLの2つのテーブルからデータをプルする際に問題が発生したことについて、別のスレッドで助けがありました。内部結合が必要だったようです。

私のテーブル:

USERS 
  --id (int)
  --username (varchar)

USER_FOLLOW
  -- id (int)
  -- follower (int)
  -- user (int)
  -- subscribed (current_timestamp)

クエリ、$ follow =

SELECT ufollower.id AS follower_id,
ufollower.username AS follower_name,
ufollowed.id AS user_id,
ufollowed.username AS user_name
FROM
/* JOIN twice against users, once to get the follower and once to get the followed */
user_follow 
/* users aliased as ufollower to get the follower details */
JOIN users ufollower ON ufollower.id = user_follow.follower
/* users aliased as ufollowed to get the followed details */
JOIN users ufollowed ON ufollowed.id = user_follow.user
WHERE
user_follow.user = $p_id

p_id私が見ている人のプロファイルIDです。

フォローしている人とフォローしている人のユーザー名を表示する必要があります。私が現在持っているコードは、私がフォローしている3人ではなく、3回表示されています。

while($apple = mysql_fetch_array($following)){
  echo '<a href="'.$apple['user_name'].'">'.htmlspecialchars($apple['user_name']).'</a> ';
}

これについて別のスレッドを開いて申し訳ありませんが、私は何時間もそれを見つめていました、そして私はそれについて頭を動かすことができません。

4

3 に答える 3

1

一見すると、間違ったユーザー名を表示していて、フォロワーではなくフォローを表示しているように見えます。PHPコードを次のように変更します。

while($apple = mysql_fetch_array($following)){
  echo '<a href="'.$apple['follower_name'].'">'.htmlspecialchars($apple['follower_name']).'</a> ';
}

クエリは実際にはあなたをフォローしているユーザーのみを返し、あなたがフォローしているユーザー()を含むユーザーは含まれないことに注意してくださいuser_follow.follower = $p_id。もちろん、それらのユーザーの場合、実際にはuser_name列を表示する必要があります...

于 2012-10-16T01:46:47.933 に答える
0
SELECT f.user,u.username,f.subscribed
FROM user_follow f inner join users u on f.user=u.id
WHERE
f.follower=1
union all
SELECT f.follower,u.username,f.subscribed
FROM user_follow f inner join users u on f.follower=u.id
WHERE
f.user=1;

クエリは、 user=1がフォローしている人+ user=1フォローしている人を取得する必要があります

于 2012-10-16T01:55:40.710 に答える
-1

ufollowedとufollowerで内部結合を実行する代わりに、ユーザーで内部結合を2回実行しています。

SELECT ufollower.id AS follower_id,
ufollower.username AS follower_name,
ufollowed.id AS user_id,
ufollowed.username AS user_name
FROM
/* JOIN twice against users, once to get the follower and once to get the followed */
user_follow 
/* users aliased as ufollower to get the follower details */
JOIN  ufollower ON ufollower.id = user_follow.follower
/* users aliased as ufollowed to get the followed details */
JOIN ufollowed ON ufollowed.id = user_follow.user
WHERE
user_follow.user = $p_id
于 2012-10-16T01:41:43.940 に答える