2012-04-24 3 views
0

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

<table border="1" cellpadding="1" cellspacing="1"> 
    <thead> 
     <tr> 
    <th scope="col">Name</th> 
    <th scope="col">Month</th> 
    <th scope="col">Cases</th>  
    </tr> 
    </thead> 
    <?php do { ?> 
    <tbody> 
    <tr> 
     <td><?php echo $row_rsChart2['ContactFullName']; ?></td> 
     <td><?php echo $row_rsChart2['Month']; ?></td> 
     <td><?php echo $row_rsChart2['Cases']; ?></td> 
    </tr> 
    </tbody> 
    <?php } while ($row_rsChart2 = mysql_fetch_assoc($rsChart2)); ?> 
</table> 

Можно я мог бы использовать месяц колонки в качестве заголовка, отображая Jan , Февраль, март и т. Д. Слева направо в заголовке столбца и случаях для каждого месяца в качестве данных?

 
Jan - Feb - Mar 
User1 100 47 89 
user2 86 67 134 

С макетом по умолчанию отображается как:

 
Name - Month - Cases 
User1 Jan 100 
User1 Feb 47 
User2 Jan 67 
+0

Я не уверен, что понимаю, что вы хотите, но с кодом выше есть что-то не так. Ваш цикл должен создать '' s не ''. Просто поставьте свой '' внутри вашего ''. Вернемся к вашему вопросу, если вы могли бы добавить больше объяснений с образцом вывода, это очень помогло бы. –

ответ

2

MySQL не имеет встроенную поддержки поворотных данные, как это. У вас есть несколько вариантов:

  1. конструкт довольно ужасный запрос MySQL для выполнения операции поворота вручную:

    SELECT * 
        FROM (
        SELECT StaffName, SUM(NumOrders) AS January 
        FROM Orders 
        WHERE Month = 'January' 
        GROUP BY StaffName 
    ) AS tJan 
        NATURAL JOIN (
        SELECT StaffName, SUM(NumOrders) AS February 
        FROM Orders 
        WHERE Month = 'February' 
        GROUP BY StaffName 
    ) AS tFeb 
        NATURAL JOIN (
        -- etc. 
    

    Если вы решите пойти по этому пути, вы можете сделать вашу жизнь немного легче генерируя этот запрос автоматически, используя либо петлевую конструкцию в PHP, либо подготовленный оператор в MySQL.

  2. ли выше, как операция разовая, так что изменяется структура базы данных MySQL, чтобы более точно отражать эту желаемую раскладку (легкий раз таблица преобразуется, но может повлиять на другие виды использования базы данных):

    CREATE TABLE NewOrders (PRIMARY KEY('StaffName')) 
    SELECT * FROM (
        -- etc. as above 
    

    В качестве альтернативы вы можете создать VIEW, который представляет собой своего рода «виртуальную таблицу», структурированную таким образом на основе базовой таблицы.

  3. Сводные данные вручную на PHP (утомительные).

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