Получить данные отчетов, которые я перевел в таблицу HTML - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть текущий SQL-запрос, который выглядит следующим образом:

SELECT
    WEEK,
    SUM(CASE WHEN WEEK = '$week1' THEN 1 ELSE 0 END) AS week_1_total,
    SUM(CASE WHEN WEEK = '$week2' THEN 1 ELSE 0 END) AS week_2_total,
    SUM(CASE WHEN WEEK = '$week3' THEN 1 ELSE 0 END) AS week_3_total,
    SUM(CASE WHEN WEEK = '$week4' THEN 1 ELSE 0 END) AS week_4_total,
    SUM(CASE WHEN WEEK = '$week1' AND TYPE = 'refund' THEN 1 ELSE 0 END) AS week_1_refunds,
    SUM(CASE WHEN WEEK = '$week2' AND TYPE = 'refund' THEN 1 ELSE 0 END) AS week_2_refunds,
    SUM(CASE WHEN WEEK = '$week3' AND TYPE = 'refund' THEN 1 ELSE 0 END) AS week_3_refunds,
    SUM(CASE WHEN WEEK = '$week4' AND TYPE = 'refund' THEN 1 ELSE 0 END) AS week_4_refunds,
    SUM(CASE WHEN WEEK = '$week1' AND TYPE = 'closure' THEN 1 ELSE 0 END) AS week_1_closures,
    SUM(CASE WHEN WEEK = '$week2' AND TYPE = 'closure' THEN 1 ELSE 0 END) AS week_2_closures,
    SUM(CASE WHEN WEEK = '$week3' AND TYPE = 'closure' THEN 1 ELSE 0 END) AS week_3_closures,
    SUM(CASE WHEN WEEK = '$week4' AND TYPE = 'closure' THEN 1 ELSE 0 END) AS week_4_closures,
    SUM(CASE WHEN WEEK = '$week1' AND history LIKE '%rejected%' THEN 1 ELSE 0 END) AS week_1_rejections,
    SUM(CASE WHEN WEEK = '$week2' AND history LIKE '%rejected%' THEN 1 ELSE 0 END) AS week_2_rejections,
    SUM(CASE WHEN WEEK = '$week3' AND history LIKE '%rejected%' THEN 1 ELSE 0 END) AS week_3_rejections,
    SUM(CASE WHEN WEEK = '$week4' AND history LIKE '%rejected%' THEN 1 ELSE 0 END) AS week_4_rejections
FROM
    my_table
WHERE
    YEAR = '$SafeFY' AND period = '$SafePeriod'
GROUP BY
    WEEK

Этот запрос работает и получает нужные мне данные, но из-за того, как я это сделал, данные были повернуты.

Я сделал это только так, потому что это единственный способ, которым я умею. Я хотел бы использовать результат в цикле PHP следующим образом:

echo '<table><opening tags> <etc...>'
while($Row = $Result->fetch_array(MYSQLI_ASSOC)) {
//HTML table rows with $Row['stuff'] here.
}
echo '</etc...></closing tags></table> '

Но данные для распечатки таблицы неправильные:

| Week | Total  | Refunds | Closures | Rejections |
|  1   |   44   |    32   |   12     |     3      |
|  2   |   40   |    21   |   19     |     6      |
|  3   |   40   |    22   |   18     |     3      |
|  4   |   41   |    32   |   11     |     6      |

Я неИмейте в виду, что нужно либо изменить запрос, чтобы получить все те же результаты без сводки, чтобы я мог зацикливать их, как я привык, либо делать что-то с массивом PHP, чтобы я мог зацикливаться на результатах этих запросов, в зависимости от того, что проще / лучше. Как?

1 Ответ

0 голосов
/ 03 ноября 2019

Хорошо, я снова посмотрел на это и думаю, что просто усложняю, чем нужно.

Исходя из следующих предположений: 1) Базы данных обычно лучше сортируют / упорядочиваютданных, чем PHP, поэтому изменение запроса, вероятно, лучше, чем изменение массива после факта. 2) Если я хочу, чтобы у результата было 5 столбцов, мне, вероятно, нужно иметь пять операторов выбора в выражении,

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

SELECT
    WEEK,
    SUM(CASE WHEN YEAR = '2019' THEN 1 ELSE 0 END) AS total,
    SUM(CASE WHEN TYPE = 'refund' THEN 1 ELSE 0 END) AS refunds,
    SUM(CASE WHEN TYPE = 'closure' THEN 1 ELSE 0 END) AS closures,
    SUM(CASE WHEN history LIKE '%rejected%' THEN 1 ELSE 0 END) AS rejections

FROM
    my_table
WHERE
    YEAR = '$SafeFY' AND period = '$SafePeriod'
GROUP BY
    WEEK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...