2014-02-08 2 views
0

У меня есть таблица.Преобразование группы по строке результата в столбец (PHP MYSQL)

Country Status 
USA  A 
USA  A 
USA  B 
USA  C 
UK  A 
UK  D 
UK  D 
China A 
China A 
China C 
China C 

Я хочу написать запрос и показать результат в таблице, как показано ниже.

Country A B C D Total 
USA  2 1 1 0 4 
UK  1 0 0 2 3 
China 2 0 2 0 4 
Total 5 1 3 2 11 

$q="SELECT Country,Status,Count(Status) as Stat Group BY Country,Status"; 
$r=mysql_query($q); 
while($o=mysql_fetch_object($r)){ 
$t .="<tr> 
     <td>$o->Country</td> 
     <td>$o->Status</td> 
     <td>$o->Stas</td> 
     </tr>"; 
} 

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

USA A 2 
USA B 1 
USA C 1 
UK A 1 
UK D 2 
China A 2 
China C 2 
+0

Пожалуйста, переформатировать вопрос, нечитаемым. Что вы пытались достичь своей цели? – markusthoemmes

+0

Рассмотрите возможность обработки проблем отображения данных в уровне представления/уровне приложения. – Strawberry

+0

стр. не используйте функции mysql, используя PDO или MYSQLI – ChelseaStats

ответ

0

Вы можете сделать это либо по запросу, либо непосредственно в php-код. По запросу он называется таблицей PIVOTing.

было бы:

select Country, A, B, C, D, (A+B+C+D) Total 
    from (
    select Country 
      sum(case status = 'A' then 1 else 0 end) as A, 
      sum(case status = 'B' then 1 else 0 end) as B, 
      sum(case status = 'C' then 1 else 0 end) as C, 
      sum(case status = 'D' then 1 else 0 end) as D 
     from yourtable 
    group by Country 
    ) as t 

Проблема с этим состоит в том, что к каждому новому status вам придется изменить ваш запрос добавления нового sum.

0

У меня также есть та же самая потребность, вот SQL, который я получил результат:

SELECT practiceCode, A, B, C, D, (A+B+C+D) Total 
FROM (
    SELECT practiceCode, 
     SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END) AS A, 
     SUM(CASE WHEN TYPE = 2 THEN 1 ELSE 0 END) AS B, 
     SUM(CASE WHEN TYPE = 3 THEN 1 ELSE 0 END) AS C, 
     SUM(CASE WHEN TYPE = 4 THEN 1 ELSE 0 END) AS D 
    FROM laborder 
    GROUP BY practiceCode, TYPE 
) AS t 
+0

@VictorM: спасибо за улучшение форматирования этого сообщения! Вам не нужно добавлять «EDIT:» к сообщению, поскольку причина редактирования уже включена в историю изменений. –

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