0

動作する次のコードがありますが、あまり効率的ではないことがわかっており、おそらくこれを単一の SQL クエリに統合できます。気にする必要がありますか?もしそうなら、どのように?

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>";
    }
}

つまずいた部分は、結合テーブルからRndIDandを取得し、2 つの異なるテーブルからデータを取得して、すべてを元に戻す方法です。UserIDRound_User

4

1 に答える 1

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

クエリは明らかにテストされていません。

于 2013-05-10T03:31:22.197 に答える