Php 是否有任何有效的方法来循环数据库数据以在同一字段的单行中显示?
我正在做一个展位预订系统。客户可以选择展位和预定日期 按下预定按钮后,每个选中的复选框将存储在预订ID中(etc:3复选框=3预订ID) 当我显示所有预订时,它将显示所有展位和当天。如果我预订同一个展位3天,它将分别显示在3行中。 如何修改编码,以便在一行中显示相同的展位及其对应的日期,如下所示: 这是我的代码:Php 是否有任何有效的方法来循环数据库数据以在同一字段的单行中显示?,php,mysql,for-loop,foreach,row,Php,Mysql,For Loop,Foreach,Row,我正在做一个展位预订系统。客户可以选择展位和预定日期 按下预定按钮后,每个选中的复选框将存储在预订ID中(etc:3复选框=3预订ID) 当我显示所有预订时,它将显示所有展位和当天。如果我预订同一个展位3天,它将分别显示在3行中。 如何修改编码,以便在一行中显示相同的展位及其对应的日期,如下所示: 这是我的代码: <?php include("dbconfig.php"); $query4 = "SELECT bookingID,eventinfo.even
<?php
include("dbconfig.php");
$query4 = "SELECT bookingID,eventinfo.eventTitle,boothAlias,testbook.bstatus,date,day, username FROM eventinfo, testbook WHERE username='$user' AND testbook.eventID = eventinfo.eventID order by date desc";
//$query4="select * from testbook, eventinfo where username= '$user' and testbook.'$event'==eventinfo.'$event' order by eventID asc";
$result4 = mysql_query($query4);
while($row=mysql_fetch_array($result4))
{
$booth=stripslashes($row["boothAlias"]);
$day=stripslashes($row["day"]);
$event= stripslashes($row["eventTitle"]);
$date=stripslashes($row["date"]);
$bstatus=stripslashes($row["bstatus"]);
if ($bstatus==0){
echo "<tr class='record'>";
echo "<td class='reg' width='80'>$booth</td>";
echo "<td class='reg' width='80'>$day</td>";
echo "<td class='reg' width='180'>$event</td>";
echo "<td class='reg' width='150'>$date</td>";
echo "<td class='reg' width='70'><img src='icon_stop.gif'/></td>";
echo "<td class='reg' width='30'><a id='$row[bookingID]' style='color:#ff0000;' class='delbutton' href='#'><img src='icon_delete.gif' border='0'></a></td></tr>";
}else{
echo "<tr class='record'>";
echo "<td class='reg' width='80'>$booth</td>";
echo "<td class='reg' width='80'>$day</td>";
echo "<td class='reg' width='180'>$event</td>";
echo "<td class='reg' width='150'>$date</td>";
echo "<td class='reg' width='70'><img src='icon.approve.gif'/></td>";
echo "<td class='reg' width='30'><a id='$row[bookingID]' style='color:#ff0000;' class='delbutton' href='#'><img src='icon_delete.gif' border='0'></a></td></tr>";
}
}
?>
您的查询需要一个GROUP BY
子句以及聚合函数:
SELECT
bookingID,
eventinfo.eventTitle,
boothAlias,
testbook.bstatus,
date,
GROUP_CONCAT(day SEPARATOR ', ') AS day,
username
FROM eventinfo, testbook
WHERE username='$user'
AND testbook.eventID = eventinfo.eventID
GROUP BY booths, date
ORDER BY date desc
这是未经测试的,但应该做你想做的。如果结果不正确,请更改GROUP BY
子句中使用的字段
在查询中,您使用的是隐式连接,这不如使用显式连接好。在不了解表结构的情况下,我无法将查询编辑为显式联接,但您应该自己查找并转换它。这将为您省去许多大查询带来的麻烦。我正要用一个子选择来回答这个问题,但这样效率更高@TimGROUP BY
和GROUP_CONCAT()
确实是非常有用的工具。但要适度使用。