【发布时间】:2014-08-20 06:17:21
【问题描述】:
我有很多表 INNER JOIN(ing) 正在处理这个,我已经弄清楚了那部分。基本上,我会显示某些信息有限的紧急呼叫,以便公众可以看到他们所在地区正在发生的事情。我最近决定将单元与工单表进行 INNER JOIN,以便人们可以查看分配给某些呼叫的单元以及呼叫的状态。
我把电话放在一张桌子上。每一行都是一个不同的调用。添加单元时遇到的问题是,如果呼叫有多个单元,即使将两行中的两个单元分配给同一个呼叫,它也会为每个单元显示不同的行。示例:
救护车 1 - 呼吸困难 - 呼叫# 1013 引擎 1 - 呼吸困难 - 呼叫# 1013 救护车 2 - 电梯辅助 - 呼叫# 1012 引擎 2 - 提升辅助 - 呼叫# 1012
我想在一行中列出所有涉及的单元,因此呼叫信息只显示一次。示例:
救护车 1,引擎 1 - 呼吸困难 - 呼叫# 1013 救护车 2,引擎 2 - 电梯辅助 - 呼叫#1012
我已经尝试使用一些教程中的 GROUP_CONCAT 和 GROUP BY 方法。这可以使每个呼叫只显示一次,但它也只为每个呼叫显示一个单位,无论是否为该呼叫分配了超过 1 个单位。
我认为这里的一个大问题在于,我在这段代码中在 INNER JOIN(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();
?>
【问题讨论】:
-
我们可以看看输出的例子吗?奥卡姆剃刀会建议查询是错误的,如果您的查询返回相同值的倍数,那么这是一个很好的起点。
-
您能否仅展示表、查询和数据库输出的示例? HTML 不太可能是相关的。
-
当然可以。我将把这个电话留在黑板上一段时间,这样你就可以看到发生了什么。可能会添加其他调用。现在,您可以看到有两个单元分配给同一个呼叫。如果它在同一行中列出两个单元会更好,这样调用只会显示一次:compellingproductions.com/911/testarea.php
-
我不知道是否值得注意,我使用上面的脚本只是为了调用和显示我包含在其中的有限信息。添加/修改/删除调用/单位/等的脚本。是一个非常复杂的脚本,涉及到 BUNCH 更多的表,但这不适合公众,我只是想向公众展示一些有关活动呼叫的基本信息。
-
非常感谢那些建议修改我的代码的人!我总是倾向于编写非常长的代码行,实际上我不知道我可以像在“WHERE”子句中那样压缩它。至于我的桌子……嗯,它们总是很草率,所以也要感谢你的清理工作!你们都摇滚!非常感谢您的宝贵时间!
标签: php mysql group-concat