2013-05-10 78 views
0

我有下面的代码可以工作,但我知道它不是非常高效,我可以将它合并到一个SQL查询中。我应该打扰吗?如果是这样,怎么样?MySQL PHP:我怎样才能将这个嵌套的WHILE循环合并成一个查询?

function get_rnds_by_judge($judge_id) { 
global $connection; 
$sql = "SELECT * 
     FROM Round_User 
     LEFT JOIN Round 
     ON Round_User.RndID = Round.RndID 
     WHERE Round_User.UserID = '$judge_id' 
     "; 
$rnd_set = mysql_query($sql, $connection); 
confirm_query($rnd_set); 
return $rnd_set; 
} 

function get_users_by_round_and_role($round_id, $role_id) { 
    global $connection; 
    $sql = "SELECT * 
      FROM User 
      LEFT JOIN Round_User 
      ON User.UserID = Round_User.UserID 
      WHERE Round_User.RndID = '$round_id' and User.UserRoleID = '$role_id' 
      "; 
    $rnd_set = mysql_query($sql, $connection); 
    confirm_query($rnd_set); 
    return $rnd_set; 
} 

$rnd_set = get_rnds_by_judge($_SESSION[UserID]); 
while($rnd_row = mysql_fetch_array($rnd_set)){ 
    echo "<li data-role=\"list-divider\">"; 
    echo $rnd_row[RndTitle]; 
    echo "</li>"; 
    $rs_set = get_users_by_round_and_role($rnd_row[RndID], 7); 
    while($rs_row = mysql_fetch_array($rs_set)){ 
     echo "<li>"; 
     echo "<a href=\"#\">{$rs_row[UserFirstName]}</a>"; 
     echo "</li>"; 
    } 
} 

我绊倒的是我如何从我加盟Round_UserRndIDUserID去得到2个不同的表中的数据,然后把它全部重新走到一起的部分。

+0

你能告诉我们桌子的设计吗? – KaeL 2013-05-10 03:25:52

回答

0

这很难说没有看到表的结构和样本数据,但你可能寻找这样的事情

SELECT u.* 
    FROM User u LEFT JOIN 
     Round_User ru ON u.UserID = ru.UserID 
WHERE ru.RndID IN (
     SELECT ru2.RndId 
     FROM Round_User ru2 LEFT JOIN 
       Round r ON ru2.RndID = r.RndID 
     WHERE ru2.UserID = '$judge_id') 
    AND u.UserRoleID = 7 

查询显然没有经过测试。

+0

@Chaz有帮助吗?你的问题需要更多帮助吗? – peterm 2013-05-12 05:08:39

相关问题