我有两张 table 。一个名为“markers”,包含 ID(pk)、名称、地址,另一个名为“markers_date”的表,包含“markers_id、date、date2、time”。
我完全没有问题将其作为 json 进行回显。但是,我只想显示一次姓名和地址,并显示该姓名对应的日期和时间,其中有多个日期和时间。
PHP
<小时/>$markers = array();
$qry = "SELECT markers.name, markers.address, markers_date.date, markers_date.date2, markers_date.time FROM markers, markers_date WHERE markers_date.markers_id = markers.id ORDER BY markers.name";
$result = mysqli_query($dbConnect, $qry);
while($row = mysqli_fetch_object($result)) {
$markers[] = $row;
}
echo '{"markers":'.json_encode($markers).'}'; here
我收到的输出如下:
Atlantic Yacht Club 5 New St 3/31 5/30 6:30-9:00pm
Atlantic Yacht Club 5 New St 4/30 6/16 4:30-7:00pm
VFW 145 Greenwich St 4/22 6:30-9:00pm
VFW 145 Greenwich St 4/27 4/30 6:30-9:00pm
VFW 145 Greenwich St 7/22 6:30-9:00pm
我真正想要的是:
Atlantic Yacht Club 5 New St 3/31 5/30 6:30-9:00pm
4/30 6/16 4:30-7:00pm
VFW 145 Greenwich St 4/22 6:30-9:00pm
4/27 4/30 6:30-9:00pm
7/22 6:30-9:00pm
我的问题是,这是在 SQL 语句中控制还是从 PHP 数组中控制?
谢谢
最佳答案
一种方法是在 PHP 中迭代有序结果集,然后在我们不是第一次看到名称和地址的组合时有选择地清空标记名称和地址。
$curr_name = '';
$curr_address = '';
while ($row = mysqli_fetch_object($result)) {
$name = $row->name;
$address = $row->address;
// if we have seen this name/address pair already, blank it out
if ($name == $curr_name && $address == $curr_address) {
$row->name = '';
$row->address = '';
}
// otherwise, don't blank it out but remember this name/address pair
else {
$curr_name = $name;
$curr_address = $address;
}
echo '{"markers":'.json_encode($row).'}';
}
关于php - 如果从另一个表连接时记录中包含重复项,则显示记录中的一个名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268173/