显示所有结果的数据,我只想显示特定外键的数据

  • 本文关键字:显示 数据 只想 结果 php mysql
  • 更新时间 :
  • 英文 :


我不再追求显示在脚本中使用规范化部分之前的旧数据。

这个线程现在正在尝试让车辆选择显示在同一行上请继续阅读,了解我正在努力实现的目标。

我在最初的问题中寻找的代码是SELECT VehicleId, VehSelection, Form.FormId, Form.FirstName, Form.LastName, Form.Email, Form.Age, Form.Birthdate, Form.FavLanguage FROM Vehicle INNER JOIN Form ON Form.FormId = Vehicle.FormId

我将2个SQL select语句组合成1个来完成这项工作。这个SQL给了我想要的结果。情况令人困惑,所以我将对此进行解释。

我的数据库看起来像这个

表格(FormId、姓名、姓氏、年龄、生日、电子邮件、传真语言、车辆(

车辆(VehicleId、FormId(FK(、车辆选择(

表格-有186条记录。车辆表共有201条记录。这是我将要解释的令人困惑的部分。我首先创建了一个INSERT表单,在Form表中有186条记录,我在执行过程中插入了测试数据。我有一个";车辆";字段,然后我计划在其中插入车辆类型(平面等(。然后我想起来了。如果超过1,我该如何存储。所以我使用IMPLODE,知道这不会是我的最终解决方案,但我还是继续做了。所以把它保存在一个字段中,逗号分隔:飞机,游艇,超级跑车。但这违反了1NF,所以我决定将它们作为单独的记录存储到Vehicle表中。

所以我把它们像这样存储在Vehicle表中:如果FormId 132选择了3个框中的2个,它会像这样存储:132 Plane,132 Yacht,作为单独的记录。这部分工作正常。总共有3个复选框,一个是飞机,另一个是游艇,最后一个是超级汽车

现在我有一个view.php页面,它列出了Form表中的所有记录,SQL位于本文的顶部。每个记录旁边都有一个";编辑";以及";删除";链接

现在我想要的是在同一行上显示VehSelection。因此,如果有人有一架飞机和一艘游艇,它会显示在一行,而不是两行作为单独的记录。

显示数据:(更新(**(表单View.php(**

<?php 
if ($table) {
foreach ($table as $d_row) {
?>
<tr>
<td><?php echo($d_row["FirstName"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["LastName"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["Email"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["Age"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["Birthdate"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["FavLanguage"]); ?></td>
<td width="10"> </td>
<td><?php echo($d_row["VehSelection"]); ?></td>
<td width="10"> </td>
<td><?php echo("<a href='edit1.php?user_id=" . $d_row["FormId"] . "'>Edit</a>"); ?></td>
<td width="10"> </td>
<td> <?php echo("<a href='delete_feedback.php?user_id=" . $d_row["FormId"] . "'>Delete</a>"); ?></td>
</tr>
<?php 
}
}
?>

表单表中的样本数据:

191 tom smith tom@smith.com 33 09-06-1997 CSS NULL
192 Frank Lampard frank@everton.com 39 10-06-1992 CSS NULL
193 John Atkins john@gmail.com 23 11-07-2006 JavaScript NULL

注意NULLS来自表单表中的冗余车辆属性

车辆表中的样本数据:


216 191 Plane
217 192 Yacht
218 192 SuperCar
219 192 Plane
220 193 SuperCar
221 193 Plane

view.php 中的示例数据

191  tom  smith tom@smith.com  33  9-06-1997  CSS  Plane
192  Frank  Lampard  frank@verton.com  39  10-06-1992  CSS  Yacht
192  Frank  Lampard  frank@everton.com  39  10-06-1992  CSS  SuperCar   
192  Frank  Lampard  frank@everton.com  39  10-06-1992  CSS  Plane
193  John   Atkins   john@gmail.com  23  11-07-2006  JavaScript  SuperCar
193  John  Atkins  john@gmail.com  23  11-07-2006  JavaScript  Plane

这就是我想要的输出:

192  Frank  Lampard  frank@everton.com  39  10-06-1992  CSS  Yacht, Supercar, Plane

最简单的方法是使用MySQL的GROUP_CONCAT函数从vehicle表中提取所有车辆名称,并将它们放入SQL结果集中单列中以逗号分隔的列表中。

SELECT 
Form.FormId, 
Form.FirstName, 
Form.LastName, 
Form.Email, 
Form.Age, 
Form.Birthdate, 
Form.FavLanguage, 
GROUP_CONCAT(Vehicle.VehSelection SEPARATOR ', ') AS VehSelection
FROM 
Vehicle 
INNER JOIN Form 
ON Form.FormId = Vehicle.FormId
GROUP BY 
Form.FormId

根据您的样本数据,这将输出:

191 Tom Smith     tom@smith.com     33  1997-06-09  CSS         Plane
192 Frank Lampard frank@everton.com 39  1992-10-06  CSS         Yacht, SuperCar, Plane
193 Jon Atkins    jon@gmail.com     23  2006-07-11  JavaScript  SuperCar, Plane

现场演示:http://sqlfiddle.com/#!9/a167841/3

然后,根据您当前的PHP代码,只需在PHP中循环一次数据即可对其进行响应。

关于GROUP_CONCAT:的更多信息

  • 官方文件:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-凹入
  • 教程:
    • https://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php
    • https://www.mysqltutorial.org/mysql-group_concat/

为了完整起见,在SQLFiddle变得不可访问的情况下,这里发布了其余的SQL源代码:

create table form (FormId int, FirstName varchar(50), LastName varchar(50), Email varchar(100), Age int, Birthdate date, FavLanguage varchar(20));
create table vehicle  (VehicleId int, FormId int, VehSelection varchar(50));
insert into form (FormId, FirstName, LastName, Email, Age, Birthdate, FavLanguage) VALUES (191, 'Tom', 'Smith', 'tom@smith.com', 33, '1997-06-09', 'CSS'),(192, 'Frank', 'Lampard', 'frank@everton.com', 39, '1992-10-06', 'CSS'),(193, 'Jon', 'Atkins', 'jon@gmail.com', 23, '2006-07-11', 'JavaScript');
insert into vehicle (VehicleId, FormId, VehSelection) VALUES (216, 191, 'Plane'), (217, 192, 'Yacht'), (218, 192, 'SuperCar'), (219, 192, 'Plane'), (220, 193, 'SuperCar'), (221, 193, 'Plane');

最新更新