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

PHP+MySQL实现Joomla BreezingForms双表查询用户最新24条表单数据

修正后可直接运行的代码

<p>
<?php 
$user = JFactory::getUser();
// 未登录拦截提示
if ($user->id == 0) {
    echo "<p>请先登录后再查看专属数据</p>";
    return;
}
echo "<p>用户名: {$user->username} • 用户ID: {$user->id} </p>";  
$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query 
   ->select($db->quoteName(array('a.record', 'a.title', 'a.value')))
   ->from($db->quoteName('#__facileforms_subrecords', 'a'))
   // 关联提交总表,建立明细和提交记录的绑定关系
   ->innerJoin($db->quoteName('#__facileforms_records', 'b') . ' ON ' . $db->quoteName('a.record') . ' = ' . $db->quoteName('b.id'))
   // 过滤当前登录用户的提交记录
   ->where($db->quoteName('b.username') . ' = ' . $db->quote($user->username))
   // 先按提交记录ID倒序取最新提交,再按明细ID正序保证字段输出顺序和表单一致
   ->order(array($db->quoteName('b.id') . ' DESC', $db->quoteName('a.id') . ' ASC'))
   ->setLimit(24);  
$db->setQuery($query); 
$results = $db->loadObjectList(); 
?>
<table class="table table-striped well">
<div align="left">
   <tr>
            <th><h2>提交记录ID</h2></th>
            <th><h2>字段名</h2></th>
            <th><h2>存储值</h2></th>
  </tr> 
<?php foreach($results as $result) { ?>
    <tr>
            <th><?php echo $result->record; ?></th>
            <th><?php echo $result->title; ?></th>
            <td><?php echo $result->value; ?></td>
    </tr>  
<?php  }  ?>
</div>
</table>
</p>

核心调整说明

  • 修正了原代码两表无关联条件的错误,通过INNER JOIN建立a.record(明细关联的提交记录ID)和b.id(总表提交记录自增ID)的绑定关系,避免输出两表笛卡尔积的错误数据
  • 直接通过总表的b.username字段匹配当前登录用户的用户名,不需要从明细中匹配用户名字段,可直接命中该用户所有提交记录
  • 排序规则新增b.id DESC优先取ID最大的提交记录(也就是用户最新提交的记录),搭配明细ID正序保证24个字段的输出顺序和表单提交顺序完全一致
  • 新增未登录判断,避免未登录用户访问时出现异常数据

内容的提问来源于stack exchange,提问作者Jim Homyak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:36:04