2012-07-06 3 views
0

나는 사용자가 다른 사용자를 따라갈 수있는 곳에서 앱을 만들고 있습니다.MYSQL 다음 사용자 쿼리 작성하기

사용자는 다른 사용자가 누구를 따르고 있는지 볼 수도 있습니다.

지금, 나는 다음과 같은되어 사용자 2 모든 사람의 ID를 찾아 따르고의 user1 사람에 대해 그것을 비교해야 사용자 1는 다음 누가 사용자 2보고있다 말할 수 있습니다.

(다른 포럼에서 보았던) user1과 user2와 일치하는 모든 사용자의 ID 만 반환하는 대신 다음과 같은 모든 user2의 다음 ID와 사용자 이름을 검색해야합니다. 따라 오는 사람에게도 user1이 올지를 나타냅니다.

각 쿼리의 이중 for 루프를 사용하여 PHP에서 작동하도록했습니다.하지만이 코드는 비용이 많이 들며 단일 MYSQL 쿼리로 훨씬 더 최적화 될 것이라고 걱정합니다.

관련 테이블 및 열 :

여기
$user_id1 = '1991'; 
$myFollowingQuery = "SELECT following_table.followed_id, user_table.user_name 
        FROM following_table 
        INNER JOIN user_table ON 
        following_table.followed_id = user_table.user_id 
        WHERE following_table.following = 'true' 
        AND following_table.follower_id = '$user_id1'"; 

$user_id2 = '1985'; 
$userFollowingQuery = "SELECT following_table.followed_id, user_table.user_name 
         FROM following_table 
         INNER JOIN user_table ON 
          following_table.followed_id = user_table.user_id 
         WHERE following_table.following = 'true' 
         AND following_table.follower_id = '$user_id2'"; 

$userFollowingResult = mysql_query($userFollowingQuery) 
          or doResponse('error',"Couldn't connect to the database"); 
$myFollowingResult = mysql_query($myFollowingQuery) 
          or doResponse('error',"Couldn't connect to the database"); 

      for($i = 0; $i< mysql_num_rows($userFollowingResult);$i++){ 

$loopArray = array(followed_id => mysql_result($userFollowingResult,$i,"followed_id"), 
        followed_name => mysql_result($userFollowingResult,$i,"user_name")); 

for($j = 0; $j< mysql_num_rows($myFollowingResult);$j++){ 
    if(mysql_result($userFollowingResult,$i,"followed_id") 
    ==mysql_result($myFollowingResult,$j,"followed_id")) { 
    $loopArray['is_following'] = 'true'; 
    break; 
    } 
    if($j==mysql_num_rows($myFollowingResult)-1){ 
    $loopArray['is_following'] = 'false'; 
    break; 
    } 
} 

$resultArray[$i] = $loopArray; 
} 

echo json_encode($resultArray); 
+0

나는 아니에요 그게 무슨 뜻인지, 어때? 원하는 팔로 잉리스트를 찾고 있습니까? –

+0

테이블 구조도 붙일 수 있습니까 ('show create table TABLE_NAME'). 내 생각에 MINUS, INTERSECT를 사용하여 문제를 해결할 수 있습니다. – golja

+0

초보자가되어 죄송합니다. 절대 사용하지 마십시오 (create table TABLE_NAME). 그것은 질투와 함께 작동 시키려고했지만 결과가 없습니다. 기본적으로 다음 테이블은 다음과 같이 구성됩니다. follower_id | follows_id | date_created | 다음 (참 또는 거짓) user_table은 다음으로 구성됩니다. user_id | user_name | 추종자 | 다음 | 등등. –

답변

1

는 단순화 된 쿼리입니다 : 여기

following_table 
    follower_id 
    followed_id 
    following: varchar -- 'true' or 'false' 

user_table 
    user_id 
    user_name 

내 PHP 코드

http://sqlfiddle.com/#!2/6b8d6/3

SELECT 
    user.user_id, 
    user.user_name, 
    he.follower_id AS follower_id, 
    IF(me.followed_id,1,0) AS metoo 

FROM  following AS he 

INNER JOIN user 
    ON user.user_id = he.followed_id 

LEFT JOIN following AS me 
    ON me.follower_id = 1 
    AND me.followed_id = he.followed_id 

WHERE he.follower_id = 2 
+0

매우 시원합니다. 거기에 어쨌든 he'followed_name user_table에서 얻을 수 있습니까? 다음은 내가 얻으려는 마지막 JSON입니다. { "follows_id": "27", "follows_name": "userNameHere", "is_following": "true"} –

+0

안녕하세요, 저는 답변을 업데이트했습니다. – biziclop

+0

당신은 너무 많이 흔들어! 그것은 완벽하게 작동했습니다. 도와 주셔서 정말 감사합니다. –

관련 문제