2012-06-12 4 views
2

데이터베이스에서 ID를 얻는 중입니다. 각 ID마다 다른 테이블에서 관련 행을 가져 오기 위해 mysql 쿼리를 수행하려고합니다. 로그인 한 사용자에 대해 비슷한 데이터를 가져와야하지만 정상적으로 작동합니다. 내가 사용하고있는 mysql 질의를 사용하면 원래 끌어온 ID의 개수에 따라 로그인 한 사용자 데이터를 복제한다. 이것은 내가 원하는 바는 아니지만 의미가 있습니다. 나는 로그인 한 사용자에 대해 중복 데이터를 원하지 않으며 타임 스탬프를 사용하여 물건을 주문할 수 있도록 한 쿼리에서 데이터가 필요합니다.루프에서 PHP가 중복되는 경우

<?php 
    mysql_select_db($database_runner, $runner); 
    $query_friends_status = "SELECT DISTINCT rel2 FROM friends WHERE rel1 = '" . $_SESSION ['logged_in_user'] . "'"; 
    $friends_status = mysql_query($query_friends_status, $runner) or die(mysql_error()); 
    $totalRows_friends_status = mysql_num_rows($friends_status); 

    while($row_friends_status = mysql_fetch_assoc($friends_status)) 
    { 
     $friends_id = $row_friends_status['rel2']; 
     mysql_select_db($database_runner, $runner); 
     $query_activity = "SELECT * FROM activity WHERE user_id = '$friends_id' OR user_id = '" . $_SESSION['logged_in_user'] . "' ORDER BY `timestamp` DESC LIMIT 15"; 
     $activity = mysql_query($query_activity, $runner) or die(mysql_error()); 
     $totalRows_activity = mysql_num_rows($activity); 
     echo "stuff here"; 
    } 
?> 
+0

PHP mysql_ 함수를 사용하지 않는 것이 좋습니다. mysqli_ 함수를 살펴보십시오.이 함수는 PHP에서 mysql 쿼리를 수행하는보다 새롭고 빠르고 안전한 방법입니다. –

+1

아마도 JOIN 문을 사용해야하며 mysql_ *이 아닌 mysqli 또는 PDO를 사용해야한다. –

+3

코드에 [N + 1 문제] (http://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem)도 있습니다. –

답변

1

이 단일 쿼리를 시도하고 당신은 아마 이런 걸 원하는 당신이

$userID = $_SESSION['logged_in_user']; 
"SELECT * FROM activity WHERE user_id IN (
    SELECT DISTINCT rel2 FROM friends 
    WHERE rel1 = '$userID') 
OR user_id = '$userID' ORDER BY `timestamp` DESC LIMIT 15"; 
+0

정말 좋은 - 건배 – Jeff

+0

이 우연히 발견되어 루프 문제가 발생하는 동안 쿼리 내 쿼리 내에서 도움이되었습니다. 감사. +1 –

0

을 필요 않는 경우 볼 수 있습니다 : 필드에 *

$user = $_SESSION['logged_in_user']; 
  $query_friends_status = "SELECT * FROM friends, activity WHERE activity.user_id = friends.rel2 AND rel1 = '$user' ORDER BY `timestamp` DESC LIMIT 15"; 

당신은 대체 할 수있는 당신 원하는 필드 이름 앞에 테이블 이름을 넣는 것을 기억하십시오.

table_name.field_name

도움이되기를 바랍니다.

+0

건배 프랑크 - 첫 번째 제안은 효과가 있지만 도움을 주셔서 감사합니다 – Jeff

+0

그래, 첫 번째 제안은 내 이상 그것을 사용하는 것이 좋아 보인다 : P는 –

관련 문제