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
相关产品推荐
相关产品推荐

