0

是否可以获取数组的结果并将其与另一个表 ID 连接以输出 ID 的名称?

这是数组的输出: Array ( [0] => 3 [1] => 1 [2] => 2 )

这是mysql:

SELECT * 
FROM 
    meet 
    INNER JOIN location 
    ON meet.meetLoc = location.locID 
    LEFT JOIN team ON meet.meetTeams = team.teamID 
ORDER BY meetDate ASC

这是 PHP,但是,当我需要“Bob : Sally : Sue”时,它只输出“3 : 1 : 2”:

$teams = explode(", ", $row_rsCurMeet['meetTeams']);
$tmp = array();
foreach ($teams as $team)
$tmp[] = $team;
echo implode('  :  ',$tmp);

我也试过这个,但它返回“鲍勃:鲍勃:鲍勃”

$team_id = $row_rsCurMeet['teamID'];    
$team_name = $row_rsCurMeet['teamName'];
$team = $row_rsCurMeet['teamName'];
$teams = explode(", ", $row_rsCurMeet['meetTeams']);
foreach ($teams as $key => $value) {
$key = $team_id;
$value = $team_name;
print_r ($value);
}

有什么想法吗?我的头因为撞墙而疼。谢谢!

SAMPLE DATA

Table meet             Table  team
meetID  meetTeams      teamID   teamName
1        3, 1, 2         1      Sally
2        2, 3, 1         2      Sue
3        1, 3, 2         3      Bob

请忽略位置信息,因为这不是问题。

4

1 回答 1

0

您的第一个问题是,如果您希望能够真正将会议与团队联系起来,您需要进行架构更改。在 meet.meetTeams 中具有类似的值1,2,3会阻止您在团队表上进行有意义的联接。

因此,我的建议是您meet.meetTeams完全删除该列以支持具有meetTeams这样结构的新表(或任何您想调用的名称)

meetId    teamID
------    ------
  1         1
  1         2
  1         3
  2         1
  2         2
  2         3
etc. 

然后你会像这样查询:

SELECT * 
FROM 
    meet 
    INNER JOIN location 
    ON meet.meetLoc = location.locID 
    INNER JOIN meetTeams
    ON meet.meetID = meetTeams.meetID
    INNER JOIN team
    ON meetTeams.teamID = team.teamID 
ORDER BY meet.meetDate ASC

如果您真正需要做的只是列出会议和团队,您可能可以从查询中删除位置表。您还可以通过不执行SELECT *并仅返回您需要的字段来限制返回的字段。

现在您可能需要获取结果集并将其读入一个多维数组,meetID作为第一维。这很容易做到。它可能看起来像这样:

$meet_array = array()
while ($row = [YOUR PHP TO RETRIEVE ROW ARRAY FROM RESULT SET]) {
   $meet_array[$row['meetID']] = $row;
}

foreach ($meet_array as $meet_id => $meet_data) {
    echo 'Meet ID: ' . $meet_id . ' <br />';
    foreach ($meet_data as $data) {
        echo 'Team ID: ' . $data['teamID'] . ', Team Name: ' . $data['teamName'] . ' : ';
    }
    echo '<br />';
}
于 2012-12-14T17:38:39.613 回答