Php 显示与同一行关联的多个字段

Php 显示与同一行关联的多个字段,php,mysql,group-concat,Php,Mysql,Group Concat,我有很多表内部连接(ing)正在进行,这一部分我已经解决了。基本上,我会显示一些信息有限的紧急呼叫,这样公众就可以看到他们所在地区发生了什么。我最近决定将这些单位与票证表进行内部连接,这样人们就可以看到分配给特定通话的单位以及他们在通话中的状态 我把电话放在桌子上。每一行都是不同的调用。当我添加单元时遇到的问题是,如果一个呼叫有多个单元,那么即使两行中的两个单元分配给同一个呼叫,它也会为每个单元显示不同的行。例如: 救护车1-呼吸困难-呼叫#1013 发动机1-呼吸困难-呼叫#1013 救护车2

我有很多表内部连接(ing)正在进行,这一部分我已经解决了。基本上,我会显示一些信息有限的紧急呼叫,这样公众就可以看到他们所在地区发生了什么。我最近决定将这些单位与票证表进行内部连接,这样人们就可以看到分配给特定通话的单位以及他们在通话中的状态

我把电话放在桌子上。每一行都是不同的调用。当我添加单元时遇到的问题是,如果一个呼叫有多个单元,那么即使两行中的两个单元分配给同一个呼叫,它也会为每个单元显示不同的行。例如:

救护车1-呼吸困难-呼叫#1013 发动机1-呼吸困难-呼叫#1013 救护车2-电梯辅助-呼叫#1012 发动机2-提升辅助-呼叫#1012

我想列出一行中涉及的所有单位,以便通话信息只显示一次。例如:

救护车1,引擎1-呼吸困难-呼叫#1013 救护车2,发动机2-升降机辅助-呼叫#1012

我尝试过使用一些教程中的GROUP_CONCAT和GROUP BY方法。它的工作原理是只显示每个呼叫一次,但它也只为每个呼叫显示一个单位,无论是否为该呼叫分配了多个单位

我认为这里的一个大问题在于,在这段代码中,我在内部联接(ing)多个表之间有很多信息,但为了显示单元名称(1),而不仅仅是表示该单元的id号(41),所有这些都是完全必要的

我正在使用的一个基本表编码如下,没有使用GROUP_CONCAT或任何GROUP方法。 非常感谢所有能够提供任何建议的人,因为这一条真的让我迷路了

<table cellspacing=10>
    <tr>
        <th align="left">
            <u>Assigned Units-Status</u>
        </th>
        <th align="left">
            <u>City/Area</u>
        </th>
        <th align="left">
            <u>Call Date/Time</u>
        </th>
        <th align="left">
            <u>Call Description</u>
        </th>
     </tr>

<?php
    // Connect to database server
    mysql_connect("host", "db", "pass") or die (mysql_error ());

    // Select database
    mysql_select_db("dbname") or die(mysql_error());

    // SQL query
    $query="SELECT 911dbticket.id, 911dbticket.city, 911dbticket.problemstart, 911dbticket.description, 911dbassigns.ticket_id, 911dbassigns.responder_id, 911dbassigns.status_id, 911dbassigns.dispatched, 911dbassigns.responding, 911dbassigns.on_scene, 911dbassigns.clear, 911dbresponder.name
    FROM 911dbticket
    INNER JOIN 911dbassigns ON 911dbticket.id=911dbassigns.ticket_id
    INNER JOIN 911dbresponder ON 911dbassigns.responder_id=911dbresponder.id
    INNER JOIN 911dbun_status ON 911dbassigns.status_id=911dbun_status.id
    WHERE `status` !='1' AND `in_types_id` NOT IN ('3', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14') 
    ORDER BY problemstart DESC";

    // Execute the query (the recordset $rs contains the result)
    $rs = mysql_query($query);

    // Loop the recordset $rs
    // Each row will be made into an array ($row) using mysql_fetch_array
    while($row = mysql_fetch_array($rs)) {
        echo "<tr><td><font color=orange>".$row['name']."</font></td><td><font color=green>".$row['city']." </font></td><td><font color=green> ".$row['problemstart']."</font></td><td width=500><font color=green><i>".$row['description']."</i></font></td></tr>";

    }

    // Close the database connection
    mysql_close();
?>

分配的单位状况
城市/地区
通话日期/时间
通话描述

我明白了。我不知道“GROUP_CONCAT”必须包含在行结果中,如下所示:

$row['GROUP_CONCAT(name)']
而不是简单地:

$row['name']
我在做更多的研究,看更多的例子和教程,我在echo中看到了这一点,并尝试了一下。我高兴地惊讶地看到“救护车1号,引擎1号”在同一个呼叫旁边的一排!哈哈


非常感谢你们花时间来检查这个并帮助我!我真的很感激!希望这篇文章能帮助其他可能遇到这个问题的人。

我们能看看输出的例子吗?Occam的Razor建议查询是错误的,如果您的查询返回相同值的倍数,那么这是一个很好的开始。您能否仅显示一个表、查询和db输出的示例?HTML不太可能是相关的。当然。我会把这个电话留在黑板上一段时间,让你看看发生了什么。可能会添加其他呼叫。现在,您可以看到有两个单元分配给同一个呼叫。如果它将两个单元列在同一行中,那么调用只显示一次会更好:我不知道是否值得注意,我使用上面的脚本只是调用并显示其中包含的有限信息。添加/修改/删除呼叫/单位/等的脚本非常复杂,涉及到大量的表,但这不是为公众准备的,我只是想向公众展示一些关于活动呼叫的基本信息。非常感谢那些建议编辑我代码的人!我总是倾向于使用非常长的代码行,实际上我并不知道我可以像你在“WHERE”子句中那样压缩代码。至于我的桌子……嗯,它们总是很邋遢,所以也谢谢你的清理!你们都很摇滚!我真的很感谢你的时间!