繁体   English   中英

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

[英]select from identical mysql tables with dynamic column names

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

谢谢!

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

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

但是,元数据表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
    . . .
);

虽然Gordons答案会行得通,但我可以轻松完成它:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM