我已经成功完成了我的第一步(link to my G+ post,但你不必阅读它。一切都在这里)。现在有一些并发症。这是演示表:
ID | userid | Age | Name --------------------------- 1 | 1 | 30 | John 2 | 1 | 31 | Mike 3 | 1 | 30 | Whoever 4 | 2 | 32 | Jack 5 | 2 | 31 | Alice 6 | 3 | 30 | Kurt
我只想显示userid = 1
行+年龄相同的人必须在同一行:
userid | Age | Name --------------------------------- 1 (hidden) | 30 | John, Whoever 1 (hidden) | 31 | Mike
在我的数据库中,我使用的是subject
和grade
,而不是age
和name
。这就是我的MySQL查询现在的样子:
SELECT
p.subject as 'subject'
GROUP_CONCAT(grade) as grades
FROM grades p
GROUP BY p.subject
显示每个userid
的数据。 Userid
并不总是1,所以我不能只说if($userid == 1){/*code*/}else{/*code*/}
或类似的东西。
我该如何做到这一点?
我用来显示数据的一些PHP代码:
<?php
$result = $dbc->query("
SELECT
p.subject as 'subject',
id, finished, date,
GROUP_CONCAT(grade) as names
FROM grades p
GROUP BY p.subject
");
?>
<table>
<tr>
<th>Subject</th>
<th>Grade</th>
</tr>
<?php while($row = $result->fetch_assoc()){
$names = split(",",$row["names"]);
?>
<tr>
<td><?php echo $row["subject"] ?> </td>
<td><?php foreach( $names as $name){echo $name . ' ' ; } ?>
</tr>
<?php } ?>
</table>?
答案 0 :(得分:0)
好的,我一直在玩这个,我得到了它
您希望按用户ID和年龄进行分组,以便可以对具有特定用户ID和年龄的数据执行聚合。
我已经包含了创建表格的代码并插入数据,因为任何人都可以阅读想要快速播放的问题。
create table grades
(
id int(2),
userid int(2),
age int(2),
name varchar(20),
)
insert into grades values
(1,1,30,'John'),
(2,1,31,'Mike'),
(3,1,30,'Whoever'),
(4,2,32,'Jack'),
(5,2,31,'Alice'),
(6,3,30,'Kurt');
SELECT
userid, age, GROUP_CONCAT(name)
FROM grades
GROUP BY userid, age
答案 1 :(得分:0)
http://sqlfiddle.com/#!9/7d9ac/3
SELECT Age, GROUP_CONCAT(Name)
FROM grades
WHERE userid=1
GROUP BY Age