2013-04-02 105 views
0

我必須使用limesurvey創建的表。表結構始終相同,前9個colums(id | taken | submitdate | ...)也是如此。但其餘200列是動態命名的,由id,問題集ID和問題ID(即445999X180X151702)組成。可能會插入新表格,但會(現在)始終遵循此方案。我必須創建一些形式的結果表槽。我可以通過數字來引用列,但這對我來說似乎是錯誤的(改變問題的數量不太可能,但誰知道)。有什麼不同的方法嗎?如果沒有,我是否至少可以創建某種映射文件,這樣當我必須對錶進行任何更改時,我的php應用程序將很容易更新?從具有動態列名的相同的mysql表中選擇

謝謝!

編輯:不幸的是我無法控制這個表結構。這是表格由limesurvey創建的方式,因爲這是我必須處理的工具。我正在尋找最好的方法:)

+3

這是一個荒謬的表結構。如果您有任何控制權,請廢棄這些垃圾並使用正確的標準化設置進行重建。 –

+0

不幸的是我無法控制它。這是表格的方式,我將不得不處理它。我正在尋找最好的方法:) – Markus

+0

而不是通過數字引用列可以通過獲取元數據的名稱引用它們?這樣你就不需要依賴於保持不變的數字。看到這裏:http://www.php.net/manual/en/mysqli-result.fetch-field.php或者我不明白這個問題... –

回答

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

這給了我一個編號的陣列,並且由於結構是所有調查相同該數組總是相同的。

+0

@戈登Linoff - 這個查詢會被認爲是不好的做法由於SQL注入風險?我需要類似的解決方案。 –

相關問題