我必须使用limesurvey创建的表格。表结构总是相同的,前9个列(id | take | submitdate | ...)也是如此。但200列的其余部分是动态命名的,包括id,问题集ID和问题ID(即445999X180X151702)。可能会插入新表,但(现在)将始终遵循此方案。我必须通过php创建某种形式的结果表。我可以按编号引用列,但这对我来说似乎不对(问题的数量变化不太可能,但谁知道)。有什么不同的方式吗?如果没有,我是否至少可以创建某种映射文件,这样当我必须对表进行任何更改时,我的php应用程序将很容易更新?
谢谢!
编辑:不幸的是我无法控制这个表结构。这是由limesurvey创建表的方式,因为这是我在这里使用的工具,我将不得不处理它。我正在寻找最好的方法:)答案 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)) {
...
}
这给了我一个带编号的数组,因为所有测量的结构都相同,所以数组总是相同的。