Сортировать MySQL запрос в PHP - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь отсортировать баллы разных пользователей по убыванию (по возрастанию). Но в данный момент запрос возвращается в порядке идентификатора пользователя (порядок их появления в базе данных). Я не уверен, что не так с моим кодом?

Пользователь может находиться в нескольких лигах, поэтому он сначала запрашивает лиги, в которых находится конкретный пользователь. С идентификаторами лиг я запрашиваю, чтобы увидеть какие пользователи в каждой из лиг. Затем я спрашиваю, сколько очков у каждого пользователя в этой лиге. В конечном счете, я хочу получить рейтинг пользователя для каждой лиги, но в данный момент запрос к порядку по точкам не работает.

На рисунке показано, как получаются очки. «1635» - это очки пользователей, которые вошли в систему. В первой лиге я пытаюсь отобразить «ранг 2».

enter image description here

// SQL query to see what leagues user is in
    $query = mysqli_query($con, "SELECT * FROM UserLeague WHERE UserID='$userid'");
    $num = mysqli_num_rows($query);

    if($num == 0) {
      echo 'You are not in any leagues';
      return;
    } else {
      echo '<div class="pleague-table">';
      echo '<div class="pleague-table-header">';
      echo '<p>PRIVATE LEAGUE</p>';
      echo '<p>CURRENT RANK</p>';
      echo '</div>';
    }

    while($leagueid = mysqli_fetch_assoc($query)) {

        $lid = $leagueid['LeagueID'];

        // Get all league info that user is in

        $query2 = mysqli_query($con, "SELECT * FROM League WHERE LeagueID='$lid'");

        // Get all users that is in each league

        $queryposition = mysqli_query($con, "SELECT UserID FROM UserLeague WHERE LeagueID='$lid'");

        while($getpoints = mysqli_fetch_assoc($queryposition)) {

          $uid = $getpoints['UserID'];

          // Get each users points in each league

          $querypoints = mysqli_query($con, "SELECT * FROM Points WHERE UserID='$uid' ORDER BY total DESC");
          while($row = mysqli_fetch_assoc($querypoints)) {
            echo $row['total']. '</br>';
          }


        }



        while($leaguename = mysqli_fetch_assoc($query2)) {
          echo '<div class="league-link">';
          echo $leaguename['Name'];
          echo '<a href="#">Options</a>';
          echo '</div>';
        }

    }
'''

1 Ответ

1 голос
/ 28 марта 2020

Вы пытаетесь объединить 2 таблицы: UserLeague и Points, чтобы выбрать пользователей из UserLeague и упорядочить их по точкам. Для таких случаев есть синтаксис JOIN в SQL:

SELECT Points.* 
FROM Points 
RIGHT JOIN UserLeague ON Points.UserID=UserLeague.UserID 
WHERE UserLeague.LeagueID=? 
ORDER BY Points.total DESC
...