从具有动态列名的相同mysql表中选择

时间:2013-04-02 14:52:53

标签: php mysql dynamic limesurvey

我必须使用limesurvey创建的表格。表结构总是相同的,前9个列(id | take | submitdate | ...)也是如此。但200列的其余部分是动态命名的,包括id,问题集ID和问题ID(即445999X180X151702)。可能会插入新表,但(现在)将始终遵循此方案。我必须通过php创建某种形式的结果表。我可以按编号引用列,但这对我来说似乎不对(问题的数量变化不太可能,但谁知道)。有什么不同的方式吗?如果没有,我是否至少可以创建某种映射文件,这样当我必须对表进行任何更改时,我的php应用程序将很容易更新?

谢谢!

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

2 个答案:

答案 0 :(得分: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
    . . .
);

答案 1 :(得分: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)) {
...
}

这给了我一个带编号的数组,因为所有测量的结构都相同,所以数组总是相同的。