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

PHP实现PostgreSQL查询结果按基因名拆分子表格

按基因名分组生成独立子表格的PHP解决方案

你需要将PostgreSQL基因表的查询结果按gene_name分组,每个基因单独生成带标题的子表格,之前的尝试代码逻辑有误导致空结果,以下是修正方案:

先修正原代码的基础错误

  • SQL语句里的pg_escape_string(search_input)需改为pg_escape_string($search_input),变量名遗漏了$
  • 输出HTML时存在无对应开标签的</a>,以及重复的<td>标签,这些会导致页面结构混乱

核心实现思路

要实现分组输出,需先让查询结果按gene_name排序,确保同基因的记录连续排列;遍历结果时跟踪当前处理的基因名,遇到新基因时关闭上一个表格(若存在),输出新基因标题并开启新表格,同基因的记录则继续添加到当前表格中。

完整修正代码

<?php
$search_input = test_input($_GET["search_keywords"]);
$searched_by = test_input($_GET["search_by"]);
// 修正变量名,添加ORDER BY确保同基因记录连续
$query = "SELECT * FROM gene WHERE lower($searched_by) SIMILAR TO '%".pg_escape_string($search_input)."%' ORDER BY gene_name";

$res = pg_query($query) or die('Query failed: ' . pg_last_error());

if (pg_num_rows($res) > 0) {
    $current_gene = '';
    while ($line = pg_fetch_array($res, null, PGSQL_ASSOC)) {
        $found_gene = $line["gene_name"];
        $found_desc = $line["description"];
        
        // 遇到新基因时,关闭上一个表格(如果存在),输出新标题和新表格
        if ($found_gene !== $current_gene) {
            if ($current_gene !== '') {
                echo "</tbody></table>\n";
            }
            $current_gene = $found_gene;
            echo "<h4>$current_gene</h4>";
            echo "<table class=\"table annot_table\">\n<thead><tr><th>Gene</th><th>Term</th></tr></thead><tbody>\n";
        }
        
        // 输出当前记录的行
        echo "<tr><td>$found_gene</td><td>$found_desc</td></tr>\n";
    }
    // 关闭最后一个表格
    echo "</tbody></table>\n";
} else {
    echo "<p>No results found.</p>\n";
}

pg_free_result($res);
?>

代码关键说明

  • ORDER BY gene_name:确保SQL返回的结果按基因名排序,让同基因的记录连续排列,便于分组处理
  • $current_gene变量:跟踪当前正在处理的基因名,每次循环对比当前记录的基因名,判断是否需要切换分组
  • 表格开闭逻辑:每次切换基因时,先关闭上一个表格(若不是第一个基因),再输出新基因标题和新表格头部,循环结束后关闭最后一个表格

你之前尝试代码的问题

你写的$uniqueGenes[] = array_unique($line["gene_name"]);逻辑错误:

  • array_unique()需要传入数组,但$line["gene_name"]是单个字符串,函数无法生效,只会返回包含该字符串的数组
  • 未在循环外初始化$uniqueGenes数组,且每次循环都往数组中塞入无效数组,最终遍历无法得到正确结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:26