2013-02-27 1 views
2

내 추천 시스템에 사용자를 표시하는 데 문제가 있습니다. 실제로 프로그래밍에 새로운 사람입니다. 도움이 필요해.추천 시스템에서 위의 추천을 표시하는 방법은 무엇입니까?

테이블을 보면 userid의 '29'는 refered이고 '28'입니다. '26'에 의해 '28'; '26'by '10'

사용자 세션 '29'가 활성화되면 페이지가 위에 표시되어야합니다. 희망이 있으시길 바랍니다.

Referal 테이블 :

enter image description here

코드 :

<?php 
$rs=mysql_query("select userid from referal where refereduserid='29'") or die(mysql_error()); 
$exitloopcount=mysql_num_rows($rs); 
$last=mysql_fetch_array($rs); 
if ($exitloopcount>0) 
{ 
    for($i=0;$i<$exitloopcount;$i++) 
    { 
    $rs=mysql_query("select userid from referal where refereduserid='".$last[$i]."'"); 
    while($data=mysql_fetch_array($rs)) 
    { 
     echo $data[$i]; 
    } 
    } 
} 
?> 
+0

는 관계가 일대일지도입니까? 예 : 둘 이상의 사용자 ID가 참조 할 것입니까? – Passerby

+0

예, 일대일 – user2091156

답변

1

(오라클의 CONNECT BY 절과 같은) 하나 개의 쿼리 수행에이 수 있어야한다,하지만 난 MySQL에 익숙하지 않으므로 대체 솔루션을 제공합니다. "사용하지 마십시오. mysql_* 함수 anym 여기 누군가에 의해 "광석".

이 솔루션은 더 이상 사용되지 않는 mysql_* 기능 모음 대신 MySQLi을 사용합니다.

$stmt=$mysqli->prepare("SELECT `userid` FROM `referal` WHERE `refereduserid`=?"); 
$stmt->bind_param("i",$id); //here $id=29 
$stmt->execute(); 
$result=$stmt->get_result(); 
while($row=$result->fetch_assoc()) 
{ 
    echo $row["userid"]; 
    $id=intval($row["userid"]); 
    $stmt->bind_param("i",$id); 
    $stmt->execute(); 
    $result=$stmt->get_result(); 
} 

편집 :

설명 :

한 가지에 대한 MySQLiPDO들이 prepared statement를 지원한다는 것입니다. 이 쿼리가 사용될

SELECT `userid` FROM `referal` WHERE `refereduserid`=? 

연속적 "참조 자"를 페치하는이로서는

는 연쇄 관계 (고맙게도 일대일 하나), I는 단순히 하나 개의 질의를 준비 할 수있다.

그런 다음 "개시"id, 29을 바인딩하고 쿼리를 실행합니다.

"참조 자"가 발견되면 (코드에서 보여준 것처럼) 코드를 다시 에코 한 다음 준비된 쿼리에 다시 바인딩하고 실행하여 "참조 자"를 찾습니다. 이 단계를 계속하십시오.

질문에 샘플 날짜를 사용 :

  1. 바인딩 : 29 -> 실행 -> 수 : 28
  2. 바인딩 : 28 -> 실행 -> 수 : 26
  3. 바인딩 : 26 - > 실행 -> 수 : 10
  4. 바인드 : 10 -> 실행 -> 어떤 결과
+0

님, 안녕하세요. Passerby님께, 많은 시간을드립니다. 하지만 귀하의 코드를 이해할 수 없습니다. – user2091156

+0

@ user2091156 설명이있는 편집 된 답변. 희망이 도움이됩니다! – Passerby

+0

대단히 감사합니다. – user2091156

관련 문제