2013-02-10 168 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 2013-02-10 23:54:16

回答

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

*后续问题:在'match'中如何标记lewis'具有'x'的状态?* – 2013-02-10 23:59:19