0

私は、limesurvey によって作成されたテーブルで作業する必要があります。テーブル構造は常に同じで、最初の 9 列 (id|taken|submitdate|...) も同じです。ただし、残りの 200 列は動的に名前が付けられ、ID、質問セット ID、および質問 ID (つまり、445999X180X151702) で構成されます。新しいテーブルが挿入される可能性がありますが、(今のところ) 常にこのスキームに従います。何らかの形式の結果シート トラフ php を作成する必要があります。列を番号で参照することはできますが、それは間違っているように思えます (質問の数が変わる可能性はあまりありませんが、誰にもわかりません)。何か違う方法はありますか?そうでない場合は、少なくとも何らかのマッピング ファイルを作成して、テーブルに変更を加える必要があるときに、php アプリケーションを簡単に更新できるようにすることはできますか?

ありがとうございました!

編集: 残念ながら、このテーブル構造を制御することはできません。これは、limesurvey によってテーブルが作成される方法であり、ここで使用されるツールであるため、対処する必要があります。私はそれを行うための最良の方法を探しています:)

4

2 に答える 2

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

これにより、番号付きの配列が得られます。構造はすべての調査で同じであるため、配列は常に同じです。

于 2013-04-04T12:11:45.160 に答える
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
    . . .
);
于 2013-04-02T17:39:55.390 に答える