2013-02-27 1 views
2

У меня возникли проблемы с отображением пользователей в моей реферальной системе, на самом деле я новичок в программировании. Мне нужна ваша помощь.как показать выше рефералов в реферальной системе?

Если вы посмотрите на стол, вы заметите, что «userid« 29 »был refered by '28'; и '28' - '26'; также '26' '' 10 '

Когда пользовательский сеанс «29» активен, страница должна отображаться над пользователями. Надеюсь, у вас есть идея.

реферала стол:

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

Является ли отношения карта один к одному? Например. будут ли ссылки на более чем один идентификатор пользователя? – Passerby

+0

Yup, один к одному, – user2091156

ответ

1

Это должно быть в состоянии сделать с помощью одного запроса (например, п Оракула CONNECT BY), но я не знакомы с MySQL, поэтому я предлагаю вам альтернативное решение, так как вам будет сказано «не использовать mysql_* функции anym руды "кем-то здесь.

Это решение использует MySQLi вместо устаревшей коллекции функций mysql_*.

$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(); 
} 

Edit:

Объяснение:

Одна вещь о MySQLi и PDO является то, что они поддерживают prepared statement.

Поскольку это прикован отношения (и, к счастью один-к-одному один), я могу просто подготовить один запрос:

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

будет использоваться этот запрос, чтобы непрерывно принес «реферер».

Затем мы связываем идентификатор «initiate», 29 и выполняет запрос.

Пока найден «реферер», повторите его (как показано в вашем коде), а затем повторно привяжите его к подготовленному запросу и выполните его, чтобы найти его «реферер». Продолжайте этот шаг.

Используя дату выборки в вашем вопросе:

  1. обязывать: 29 -> выполняет -> получите: 28
  2. связывают: 28 -> выполняет -> получить: 26
  3. обязывать: 26 - > выполняет -> получить: 10
  4. обязывать: 10 -> выполняет -> нет результата
+0

Уважаемый Passerby, спасибо большое за ваше время. но я не мог понять ваш код, – user2091156

+0

@ user2091156 Отредактированный ответ с объяснением. Надеюсь, поможет! – Passerby

+0

Большое спасибо, теперь его ясно. – user2091156