как отсортировать данные MySQL по значениям, вычисленным вне базы данных

0

У меня есть две таблицы MySQL: опросы и кандидаты. Кандидаты в таблице хранят имена кандидатов и позицию, в которых они соперничают, т.е. кандидатов (имя кандидата, позиция). Таблица опросов хранит каждый опрос, сделанный пользователем во время голосования. Структура таблицы опросов - это опросы (имя кандидата, позиция). Предполагая, что есть только одна должность председателя, а кандидаты - 3; x, y и z. когда пользователь голосует за x, строка в опросах таблицы заполняется значением (x, председатель). предполагая, что будет выпущено 6 бюллетеней, и таблица будет выглядеть следующим образом.

|y | Chairman|
|x | Chairman|
|z | Chairman|
|x | Chairman|
|y | Chairman|
|x | Chairman|

Из этой таблицы я хочу отобразить в ней каждого кандидата и количество голосов, полученных в таблице html. код для этого

$cnameres=mysqli_query($conn,"SELECT candidate_name FROM candidates WHERE Position ='Chairperson'");

            while($cname = mysqli_fetch_array($cnameres))
            {

                $v = $cname['candidate_name'];

                //total votes for each candidate

                $cand_ballot_count = mysqli_fetch_array(mysqli_query($conn, "SELECT COUNT(Position) FROM polls WHERE Position ='Chairperson' and candidate = '$v'"));
                $y = $cand_ballot_count[0] ;        

            //echo candidate and votes

              echo "<tr align='left'>"; 
                echo"<td>" .$v ."</td>";
                echo"<td>". $y. "</td>";

            }

Результатом будет таблица html, называемая таблицей результатов, которая выглядит так.

| y | 2 |
| x | 3 |
| z | 1 |

Мой вопрос; как я могу сортировать эти данные, чтобы он мог эхо в таблице результатов сортироваться в порядке убывания, как это.

| x | 3 |
| y | 2 |
| z | 1 |

помните, что значение, которое нужно сортировать, отсутствует в базе данных. это только результат подсчета строк.

Теги:

2 ответа

1
Лучший ответ

Вы можете JOIN к JOIN запросам в одном, например, ниже

SELECT c.candidate_name, count(*) AS votes
FROM candidates c 
JOIN polls p ON c.candidate_name = p.candidate_name
WHERE c.Position = 'Chairperson'
GROUP BY c.candidate_name
ORDER BY votes DESC;

Вот обновленный код

$sql = "
SELECT c.candidate_name, count(*) AS votes
FROM candidates c 
JOIN polls p ON c.candidate_name = p.candidate_name
WHERE c.Position = 'Chairperson'
GROUP BY c.candidate_name
ORDER BY votes DESC;
";

$cnameres = mysqli_query($conn, $sql);

while($cname = mysqli_fetch_array($cnameres))
{

    $v = $cname['candidate_name'];

    //total votes for each candidate
    $y = $cname['votes'];

    echo "<tr align='left'>"; 
    echo"<td>" .$v ."</td>";
    echo"<td>". $y. "</td>";
    echo "<tr/>";
}
  • 0
    не работал для меня. или, может быть, я плохо использовал код. если вы можете сделать полный код, пожалуйста, я. помните, что код выполняется в цикле while, и я не уверен, что ваше предложение не подходит.
  • 0
    Готово. Проверьте мой обновленный ответ.
Показать ещё 2 комментария
1

Вы должны подсчитывать строки в базе данных. Тогда упорядочение тривиально:

SELECT c.candidate_name, COUNT(p.candidate_name) as num_votes
FROM candidate c LEFT JOIN
     polls p
     ON c.candidate_name = p.candidate_name
WHERE c.Position = 'Chairperson'
GROUP BY c.candidate_name
ORDER BY COUNT(*) DESC;

Я не уверен, что join необходимо. У вас есть position_name и position избыточно в обеих таблицах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню