将一个表中的列与另一个表匹配

时间:2014-01-27 05:41:25

标签: php mysql sql

很抱歉这个令人困惑的标题,让我试着解释一下。问题涉及自定义日志记录软件,公司可以在其中设计自己的“日志”。每个日志都有一个相应的元数据表,其中包含日志中的列。

我使用php来渲染日志中的数据显示。我首先访问元表中的列名,并使用它来构建带有foreach的表头,如图所示

foreach ($logStructure as $header)
{
   echo '<th>' . $header['label'] . '</th>';
}
endforeach;  

现在我已经从实际日志中选择了另一个要显示的行,并在数组中调用$ logrow。 如何迭代这些行并将正确的数据放在右列? 在SQl中,我会使用WHERE子句来说明以下内容:

'WHERE $logrow['fieldname'] = $header['label']'

作为一个例子,metatable字段看起来像这样

[metaid] [columnLabel] [columnNameInData]
   001     Log Number       logNum
   002       Author        CreateUser
   003       Subject        Entry

数据通过类似

的语句放入$ header []
SELECT columnLabel AS label FROM metatable;

日志结构看起来像这样

[logNum]  [CreateUser]       [Entry]
   001       Admin       Some Text about Stuff
   002      Editor 1     Another Amazing Entry
   003      Editor 2      It gets old by now

所以选择看起来像这样

SELECT logNum, CreateUser, Entry FROM log 

数据放入$logrow['lognum'], $logrow['CreateUser'], $logrow['Entry']

希望这会更好地解决问题,我希望将元数据中的列名与实际数据中这些字段的值相匹配。

1 个答案:

答案 0 :(得分:0)

如果序列总是一样的,并且你只是想在同一个表中渲染它,我看不出是什么阻止你将它们读入2个独立的数组,然后将它绘制到表格上。

首先:

SELECT columnNameInData FROM metatable ORDER BY metaid;

将结果放入数组$sort

然后将其内爆并构建您的第二个选择子句:

$columns=implode(', ', $sort);
$SQL="SELECT $columns FROM log";

将结果读入数组$result2

最后,将您拥有的标头和$ result2的输出组合为日志的行和标记,此表应该使标记与标题对齐。