鉴于您的 Dom 表仅包含正数而不包含负数,您需要生成负数,以便您的输出表可以映射它们。
此查询将为您提供来源、域和物种的所有可能组合:
SELECT ds.domain, os.origin, ss.species FROM
(SELECT DISTINCT domain FROM Dom) ds
CROSS JOIN
(SELECT DISTINCT origin FROM Dom) os
CROSS JOIN
(SELECT DISTINCT species FROM Dom) ss
因此,要获取每个组合的“表达式值”,包括负数,请执行以下操作:
SELECT completelist.domain, completelist.origin, completelist.species,
COALESCE(Dom.species, FALSE) AS found
FROM
(SELECT ds.domain, os.origin, ss.species
FROM
(SELECT DISTINCT domain FROM Dom) ds
CROSS JOIN
(SELECT DISTINCT origin FROM Dom) os
CROSS JOIN
(SELECT DISTINCT species FROM Dom) ss
) AS completelist
LEFT JOIN Dom ON (completelist.domain = Dom.domain &&
completelist.origin = Dom.origin &&
completelist.species = Dom.species)
一旦您从数据库中获得了一组记录,您就可以将其输出为html表。您可以根据 expressionvalue 的值设置(使用css)元素的样式。<td>
所以你的输出看起来像这样:
<table>
<thead>
<tr>
<th>Origin</th>
<th>Domain</th>
<th>Blahbla_1234</th>
<th>wobble_4556</th>
<th>piffi_876</th>
</tr>
</thead>
<tbody>
<tr>
<th>KMT1</th>
<th>Kringel</th>
<td class='bothexist'> </td>
<td class='bothexist'> </td>
<td class='onlyprotein'> </td>
</tr>
<tr>
<th>KMT1</th>
<th>Helix</th>
<td class='bothexist'> </td>
<td class='onlyprotein'> </td>
<td> </td>
</tr>
<!-- etc. -->
</tbody>
<tfoot></tfoot>
<table>
繁琐的部分是将来自您的查询的数据重新组织成一个结构,以便从中轻松输出表。
无论如何,虽然您可以使用 shell 脚本来完成所有这些工作,但使用高级语言可能会更轻松。perl传统上用于生物信息学,并且有许多不错的库可用,其中可能最重要的是BioPerl。python和ruby 也很受欢迎。php是一种非常流行和通用的语言,特别适用于网站并且被认为非常容易学习(但许多程序员反对它的各种松懈)。
我希望这能为您指明一个有用的方向。