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

Php 从具有动态列名的相同mysql表中进行选择,php,mysql,dynamic,limesurvey,Php,Mysql,Dynamic,Limesurvey,我必须使用limesurvey创建的表格。表结构总是相同的,前9列id | take | submitdate |也是一样的。。。。但其余200列是动态命名的,由id、问题集id和问题id组成,即44599x180x151702。可能会插入新表,但目前将始终遵循此方案。我必须通过php创建某种形式的结果表。我可以通过数字来引用这些列,但对我来说,这似乎是错误的。问题数量的变化不大可能,但谁知道呢。有什么不同的方法吗?如果没有,我至少可以创建某种映射文件,这样当我必须对表进行任何更改时,我的php

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

谢谢大家!


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

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

不过,元数据表信息_schema.columns可以帮助您。这将为您提供每个表的列位置序号和列名列名称之间的映射

在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
    . . .
);

虽然Gordon的答案会起作用,但我还是能够轻松一点:

$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)) {
...
}

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

这是一个荒谬的表结构。如果你对它有任何控制权,请丢弃这个垃圾,并使用正确的标准化设置进行重建。不幸的是,我无法控制它。这就是桌子的样子,我必须处理它。我正在寻找实现这一点的最佳方法:与其按数字引用列,不如通过获取元数据按名称引用它们?这样,您就不需要依赖于保持不变的数字。请看这里:或者我不明白这个问题…@gordonlinoff-由于SQL注入风险,这个查询会被认为是不好的做法吗?我需要一个类似的解决方案。