2015-07-28 4 views
0

У меня есть следующая таблица, которая предназначена для показа записи выигрыша/проигрывания и для ранжирования. Однако я столкнулся с двумя проблемами.Заказ по выбранному столбцу из базы данных

  • Первая проблема заключается в том, что мой ранг <td> не прогрессирует, как я хочу. Я имею в виду, что для каждой записи, которая зациклирована и выводится, я хочу, чтобы она была пронумерована.

т.е.

3 и т.д.

  • Вторая часть я не могу понять, как я хочу, чтобы люди с самой высокой победой общей для быть ранжированным самым высоким. Я также хочу, чтобы потери были настроены на это. Так что, если кто-то 5-0, их ранг будет выше, чем у кого-то 5-1.

Может кто-нибудь указать мне в правильном направлении с этими проблемами, с которыми я сталкиваюсь?

<h2>Division 1</h2> 
      <table> 
       <tr> 
        <th>Rank</th> 
        <th>Name</th> 
        <th>Wins</th> 
        <th>Losses</th> 
       </tr> 
<?php 
try { 
    //Prepare 
    if ($stmt = $con->prepare("SELECT * FROM team_rankings WHERE `division`=1")) { 

     $stmt->execute(); 
     $stmt->bind_result($ranking_id, $ranking_user_id, $ranking_firstname, $ranking_username, $ranking_division, $ranking_wins, $ranking_losses); 

     //var_dump($stmt); 

     if (!$stmt) { 
      throw new Exception($con->error); 
     } 

    $stmt->store_result(); 
     while ($row = $stmt->fetch()) { 
?> 

      <tr> 
       <td>1</td> 
       <td><?php echo $ranking_firstname; ?></td> 
       <td><?php echo $ranking_wins; ?></td> 
       <td><?php echo $ranking_losses; ?></td> 
     </table> 
<?php  
     } 
     } else { 
      echo "<p>There aren't any players in division 1 yet.</p>"; 
      } 
} 
catch (Exception $e) 
{ 
    echo "Error: " . $e->getMessage(); 
} 
?> 

ответ

3

Вы должны использовать ORDER BY как этот

ли это:

SELECT * FROM team_rankings WHERE `division`=1" ORDER BY Wins DESC, Losses 

Подробнее: link

Для вашего первого вопроса вам </table> должен быть из вашего цикла PHP while , Также есть счетчик, который вы можете увеличить и показать заказ.

$count = 0; 
while ($row = $stmt->fetch()) { 
?> 
    <tr> 
     <td><php echo $count; $count++; ?></td> 
     <td><?php echo $ranking_firstname; ?></td> 
     <td><?php echo $ranking_wins; ?></td> 
     <td><?php echo $ranking_losses; ?></td> 
    </tr>  
<?php } ?> 

</table> 

Что-то лучше? Используйте foreach

+1

Приращение $ count ... – MaggsWeb

+1

Перечитывая вопрос Я думаю, что это должно быть _SELECT * FROM team_rankings WHERE 'division' = 1" ORDER BY Побед DESC, Losses_ (чтобы дать 5-0, 5-1 ...) – PaulF

+0

@ PaulF Chris Спасибо за ребята. Ответ обновлен. –

1

вопрос нумерации может быть решена так:

$i = 1; 
while ($row = $stmt->fetch()) { 
    ?> 
     <tr> 
      <td><?php echo $i ?></td> 
      <td><?php echo $ranking_firstname; ?></td> 
      <td><?php echo $ranking_wins; ?></td> 
      <td><?php echo $ranking_losses; ?></td> 
     </tr> 
    <?php  
    $i++; 
} 

Это устанавливает переменную $i «1» (вне цикла), вторит переменную как число в вашей <td>, и приращение переменная $i++ перед закрытием петли.

О да, и не закрывайте <table> внутри петли. :)

0

Похоже, вы хотите использовать ORDER BY clause в вашем запросе. Он может сортировать по столбцу напрямую или по некоторым вычислениям. Например, вы можете сделать:

SELECT * 
FROM team_rankings 
WHERE division = 1 
ORDER BY 
    (wins - losses) DESC, 
    wins DESC 

Этот способ 1-0 будет занимать место выше 6-6, но ниже 2-1. Насколько это необходимо, вам решать.

Смежные вопросы