0

我必须使用由limesurvey 创建的表格。表结构始终相同,前 9 列 (id|taken|submitdate|...) 也是如此。但是其余 200 列是动态命名的,由 id、questionset id 和 question id 组成(即 445999X180X151702)。可能会插入新表,但(目前)将始终遵循此方案。我必须通过 php 创建某种形式的结果表。我可以按数字引用列,但这对我来说似乎是错误的(问题数量的变化不太可能,但谁知道)。有什么不同的方法吗?如果没有,我至少可以创建某种映射文件,以便当我必须对我的 php 应用程序进行任何更改的表进行任何更改时,我的应用程序将很容易更新?

谢谢!

编辑:不幸的是我无法控制这个表结构。这是limesurvey创建表格的方式,因为这是这里使用的工具,我将不得不处理它。我正在寻找最好的方法来做到这一点:)

4

2 回答 2

0

我不确定您希望最终结果是什么样子。

但是,元数据表information_schema.columns可以为您提供帮助。这将为您提供每个表的列位置 ( ordinal_position) 和列名称 ( ) 的映射。column_name

在 php 中,您可以按位置访问列的数据。然后,您可以在该表中查找该位置的列名。. . 并用它做你想做的事。

例如,您可以为一组此类表获取所有可能的列名,并为它们创建视图代码。就像是:

create view vw_AllQuestions as (
    select <column list> -- with NULL values for the columns not in TableA
    from tableA
    union all
    select <column list> -- with NULL values for the columns not in TableB
    from tableB
    . . .
);
于 2013-04-02T17:39:55.390 回答
0

虽然戈登斯的回答会奏效,但我能够更轻松地完成它:

$query  = 'SELECT * FROM lime_tokens_'.$audit.' AS tokens INNER JOIN lime_survey_'.$audit.' AS audits ON tokens.token = audits.token WHERE tokens.completed != "N"';
$result = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_row($result)) {
...
}

这给了我一个编号数组,并且由于所有调查的结构都相同,因此数组始终相同。

于 2013-04-04T12:11:45.160 回答