Невозможно присвоить ранг значениям foreach - PullRequest
0 голосов
/ 01 мая 2020

Я получил значения, используя wp->get_Results следующим образом:

global $wpdb;
$select_query = "select * from `eexamhall_result` ORDER BY `quiz_id` DESC, `percentage` DESC";
$select_result = $wpdb->get_results($select_query);
?>
<table class="display table table-bordered table-responsive"><tr><th>Sr No</th><th>Quiz ID</th><th>Name</th><th>Correct Ans</th><th>No Answer</th>
<th>Wrong Ans</th><th>Percentage</th><th>Rank</th></tr>
<?php
$i=1;
foreach($select_result as $select_result){
echo "<tr><td>$i</td><td>$select_result->quiz_id</td><td>$select_result->name</td><td>$select_result->correct</td><td>$select_result->zero</td><td>
$select_result->wrong</td><td>$select_result->percentage</td><td></td></tr>";

Данные отображаются в виде таблицы следующим образом

enter image description here

То, что я хочу сделать, это поместить значение ранга в 1,2 для идентификатора викторины 7, а когда идентификатор викторины изменится на 6, я хочу начать с 1. Как я могу получить такой подход

1 Ответ

0 голосов
/ 01 мая 2020

Если вы используете MySQL 8.0, вы можете вычислить эту информацию непосредственно в вашем запросе, используя оконную функцию row_number():

select er.*, row_number() over(partition by `quiz_id` order by `percentage` desc) rnk 
from `eexamhall_result` er
order by `quiz_id` desc, `percentage` desc

В зависимости от того, как вы хотите обрабатывать связи (то есть строки, которые имеют одинаковые quiz_id и percentage), вы также можете рассмотреть rank() или dense_rank() вместо row_number().

...