PHP MySQL:如何根据当前ID显示两张表的对应记录
解决UNION查询后动态跳转对应表记录的问题
问题分析
你通过UNION合并了结构相同的naujienos和apzvalgos两张表,但跳转链接固定为naujienos.php?naujienos_id=xxx,导致apzvalgos表的记录会错误跳转到naujienos表的对应ID记录。核心是需要在查询时标记每条记录的来源表,再动态生成对应跳转链接。
解决方案步骤
1. 修改SQL查询,添加来源表标记
在两个SELECT语句中新增自定义字段source_table,分别指定对应表名,这样就能在PHP中识别每条记录的来源:
SELECT *, 'naujienos' AS source_table FROM `naujienos` UNION SELECT *, 'apzvalgos' AS source_table FROM `apzvalgos` ORDER BY `timestamp` DESC
2. 动态生成跳转链接
在PHP循环中获取source_table字段,根据表名生成对应的跳转链接,以下是两种常见实现方式:
方式一:跳转到对应表的专属页面
如果项目中已有apzvalgos.php用于展示该表记录,直接生成对应页面的链接:
<?php $sql="SELECT *, 'naujienos' AS source_table FROM `naujienos` UNION SELECT *, 'apzvalgos' AS source_table FROM `apzvalgos` ORDER BY `timestamp` DESC"; $result=mysqli_query($con,$sql); if($result){ while($row=mysqli_fetch_assoc($result)){ $id=$row['topic_id']; $topic_image=$row['topic_image']; $topic_name=$row['topic_name']; $topic_desc=$row['topic_desc']; $timeStamp=$row['timeStamp']; $kategorija=$row['kategorija']; $sourceTable=$row['source_table']; // 根据来源表生成跳转链接 $link = $sourceTable . '.php?' . $sourceTable . '_id=' . $id; echo '<div class="card-group pl-5 col-md-3 col-sm-6 mb-5 pb-5"> <div class="card"> <img class="card-img-top paveiksliukas" src='. $topic_image.' alt="Card image cap"> <div class="card-body"> <h5 class="card-title mb-5">'. $topic_name.'</h5> <p class="card-text">'.substr($topic_desc,0,200).'</p> <a href="'. $link .'" class="btn btn-primary">Skaityti toliau</a> </div> <div class="text-center"> <b>Kategorija: '. $kategorija. '</b> </div> <div class="text-center pt-1 pb-1"> <b>Įkelta: '. $timeStamp. '</b> </div> </div> </div>'; } } ?>
方式二:使用统一页面,传递表名和ID参数
如果希望用同一个页面(比如view_record.php)处理两张表的记录展示,只需传递表名和ID两个参数:
// 生成链接部分改为 $link = 'view_record.php?table=' . $sourceTable . '&id=' . $id;
之后在view_record.php中,根据$_GET['table']和$_GET['id']查询对应表的记录即可,注意要做表名的安全校验防止SQL注入:
$allowedTables = ['naujienos', 'apzvalgos']; $table = $_GET['table'] ?? ''; if(!in_array($table, $allowedTables)){ header("HTTP/1.0 404 Not Found"); exit; }
注意事项
- 确保
UNION前后的SELECT语句字段数量一致,新增的source_table字段要在两个查询中都添加。 - 跳转链接拼接时避免多余空格,防止参数传递错误。
内容的提问来源于stack exchange,提问作者Rytis Lekstutis
相关产品推荐
相关产品推荐

