You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:45:34