Необычный поиск, помогите разобраться.

Dima85

Новичок
Есть база users с такими таблицами:
Usern = имя участника
From = кто пригласил
Block = бан

Допустим регистрируется Вася, его пригласил Коля(он уже есть в базе, Колю пригласил Андрей).
Получается Usern = Вася, From = Коля, Block = No.

После того как Вася авторизовался в $myfrom попадает тот кто его пригласил, то есть Коля
И дальше идет проверка, Коля заблокирован или нет:

Код:
$rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
while ($stk = mysql_fetch_assoc($rows)){
if ($stk['Block'] == 'Yes') {
echo $stk['Usern']." Заблокирован";
} else {
echo $stk['Usern']." Ок";
}

Вопрос. Как сделать если Коля заблокирован то показать Васе Андрея, он пригласил Колю. Если Андрей тоже заблокирован то показать того кто пригласил Андрея. И так дальше искать пока не найдется тот кого не заблокировали.

Подскажите пожалуйста как такое сделать.
 

Вурдалак

Продвинутый новичок
PHP:
/**
 * @param User $user
 * @throws ReferrerNotFoundException
 * @return User
 */
public function getReferrer(User $user)
{
    do {
        $user = $user->getDirectReferrer();
    } while ($user->isBanned());

    return $user;
}
 

Dima85

Новичок
Хорошо, сформулирую иначе. У меня не получается подстроить это под свои нужды. Разжуйте пожалуйста.
 

С.

Продвинутый новичок
Ничего необычного тут нет. Надо просто тупо идти по всей цепочке, делая поиск каждого звена отдельно (как и описано в начальном сообщении). Другого "волшебного" способа тут нет.
 

Dima85

Новичок
Мне непонятен выше предложенный пример. Сейчас я устраиваю поиск таким образом, в данном примере идет поиск до 5-того человека. Но необходимо искать до того пока он найдет незабаненного человека.

Код:
        $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
        while ($strd = mysql_fetch_assoc($rows)){
          if ($strd['Ban']=='Yes') {
            $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
            while ($strd = mysql_fetch_assoc($rows)){
              if ($strd['Ban']=='Yes') {
                $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
                while ($strd = mysql_fetch_assoc($rows)){
                  if ($strd['Ban']=='Yes') {
                    $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
                    while ($strd = mysql_fetch_assoc($rows)){
                      if ($strd['Ban']=='Yes') {
                        $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
                        while ($strd = mysql_fetch_assoc($rows)){
                          if ($strd['Ban']=='Yes') {

                          } else {
                            $myfrom = $strd['Usern'];
                          }
                        }
                      } else {
                        $myfrom = $strd['Usern'];
                      }
                    }
                  } else {
                    $myfrom = $strd['Usern'];
                  }
                }
              } else {
                $myfrom = $strd['Usern'];
              }
            }
          } else {
            $myfrom = $strd['Usern'];
          }
        }

echo $myfrom."OK";
 

fixxxer

К.О.
Партнер клуба
Что такое циклы ты знаешь - у тебя в коде используется while (причем неясно, зачем - разве может одного человека пригласить несколько человек?). Что мешает еще один сделать?
 

Dima85

Новичок
разве может одного человека пригласить несколько человек?)
Нет, не может.

А как по другому это сделать? Я новичек во всем этом. По другому не умею.
 

WMix

герр M:)ller
Партнер клуба
Dima85, ты страшный человек, если не напутал..
PHP:
 do {
    $rows = mysql_query("SELECT * FROM `users` WHERE Usern='$myfrom'");
    $strd = mysql_fetch_assoc($rows);
    $myfrom = $strd['Usern'];
} while ($strd['Ban']=='Yes');
print_r($strd);
 
Сверху