2013-02-10 2 views
0

образец таблица:PHP MySQL GROUP_CONCAT

name   subject grade status  
----------------------------------------- 
john peter  engl  NULL  X 
john peter  math  85   A 
john peter  philo NULL  X 
mark lewis  engl  90   A 
mark lewis  math  NULL  X 

пример запрос: выход

<?php 
$query="SELECT name, grade, status, group_concat(subject SEPARATOR '-') as subj 
FROM grades GROUP BY name ORDER BY name"; 
$result = $mysqli->query($query); 
<?php } ?> 
<table> 
<tr> 
    <td>name</td> 
    <td>Math</td> 
    <td>English</td> 
    <td>Philosopy</td> 
</tr> 

<?php while($row = $result->fetch_array()){ ?> 
<tr> 
<td><?php echo $row['name'];?></td> 
<td><?php if (strpos($row['subj'],'math')!== false) {echo 'I';}?></td> 
<td><?php if (strpos($row['subj'],'engl')!== false) {echo 'I';}?></td> 
<td><?php if (strpos($row['subj'],'philo')!== false) {echo 'I';}?></td> 
</tr> 
<?php } ?> 
</table> 

образца:

name   Math English Philosopy 
john peter  I  I   I 
mark lewis  I  I   

теперь приходит, что я хочу добиться:
я хотел бы отобразить статус, если его значение равно X, вот так: или есть много гораздо лучший способ сделать это?
спасибо вам, ребята ..

name   Math English Philosopy 
john peter  I  X   I 
mark lewis  X  I   
+0

Почему не тест/эхо '$ строки [ 'статус'] 'и либо распечатать «X» или «я»? – Jon

ответ

0

попробовать это,

SELECT name, 
     MAX(CASE WHEN subject = 'Math' THEN IF(status = 'X', 'X', 'I') END) MATH, 
     MAX(CASE WHEN subject = 'Engl' THEN IF(status = 'X', 'X', 'I') END) ENGLISH, 
     MAX(CASE WHEN subject = 'Philo' THEN IF(status = 'X', 'X', 'I') END) Philiosophy 
FROM tableName 
GROUP BY name 
+0

* последующий вопрос: как получилось 'mark lewis' имеет статус' x' в 'match'? * –