我有3张桌子,<div class="checkbox_option2">
,members
&amp; teams
。
team_members
容纳team_members
&amp; members
并按行存储。
teams
表的架构:
team_members
表:
我希望能够做的是创建一个联接,我可以从teams
表中输出team_name
,然后显示与该teams
相关联的members_firstname
那个团队。例如:
Team 1
joe bloggs
jon doe
Team 2
charlie chaplin
hulk hogan
我的php代码如下所示:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$sql = "SELECT t.team_name, group_concat(m.firstName)
FROM members AS m
JOIN team_members AS tm
ON tm.member_id = m.member_id
JOIN teams as t
on t.team_id = tm.team_id
GROUP BY t.teamname";
$result = $conn->query($sql);
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
echo $row["member_id"] . '<br>';
echo $row["team_id"] . '<br><br>';
}
}
?>
现在我明白了:
注意:尝试在第30行获取非对象的属性,即:
if($result->num_rows > 0){
答案 0 :(得分:1)
你应该使用两个连接来拼凑三个表。
SELECT t.team_name as team_name, group_concat(m.firstName) as team_members
FROM members AS m
JOIN team_members AS tm
ON tm.member_id = m.member_id
JOIN teams as t
on t.team_id = tm.team_id
GROUP BY t.team_name
然后,您应该在尝试使用之前检查query
的状态。
if(!$result = $conn->query($sql)) {
die(printf("Errormessage: %s\n", $conn->error));
}
然后遍历结果,并用逗号分割分组值。
while($row = $result->fetch_assoc()){
echo $row["team_name"] . '<br>';
$names = explode(',', $row['team_members']);
foreach($names as $name) {
echo $name . '<br>';
}
echo '<br>';
}
您还可以使用<br>
作为group_concat
中的分隔符。您可以在此处详细了解该功能http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat。如果您这样做,则可以删除foreach
和explode
,因为$row['team_members']
将使用每个成员的换行符构建。
答案 1 :(得分:0)
在PHP中执行此操作的简单方法是使用两个嵌套循环的宽度,首先在团队表中打印并在第二个打印它,然后打印所有播放宽度的团队ID ...
类似的东西:
do{
echo $row_team;
do{
echo $row_playa;
}while($row_plya = mysql_fetch_assoc($playas)); // whear pleya.team_id = $row_team.id
}while($row_team = mysql_fetch_assoc($teams));