0

セル データと対応する位置を持つデータベース テーブルがあります。PHPを使用して、データベースの「セルデータ」列のデータが同じレコードの「セル位置」列にあるように配置されているhtmlテーブルを表示したいと考えています。どうやってこれを行うつもりですか。mysqlだけでデータをそのままフェッチすることは可能ですか? これを達成するためのポイントがない場合は、大歓迎です。

セル位置の保存には、Excel 形式が使用されます。

                 Cell Data     Cell Position
                  Hello             A1
                  Bello             C2

EDIT
mysqlだけでなくても、プログラミングソリューションを歓迎します。しかし、PHPExcelでこれを実行できることがわかっているライブラリは必要ありません...

4

2 に答える 2

1

単純に列 AZ だった場合、これは簡単な答えです。

SELECT celldata,
       SUBSTR(cellposition,1,2) AS column,
       SUBSTR(cellposition,2) AS row,
       cellposition
  FROM mytable
 ORDER BY 3,2

「AA」、「AZ」、「BA」などの追加の列がある場合は、列/行を抽出するだけでなく、少し難しくなります。だけでなく、列の順序を処理するために...私はまだその解決策に取り組んでいます。実際にすべてを記述せずに、数値の cellposition テストの 2 番目、3 番目、4 番目の文字で CASE テストを行い、それに応じて SUBSTR オフセットと長さを調整して行と列のコンポーネントを分割し、LPAD を使用します。 () を使用して、3 文字の長さになるまで列にスペースを埋め込みます。

MySQL を拡張できる場合、LIB_MYSQLUDF_PREGは追加の PREG_CAPTURE および PREG_POSITION 関数を MySQL に提供し、これを大幅に簡単にします。ただし、これを行うにはソースから MySQL を再コンパイルする必要があります。MySQL 開発者は、これを標準として実装することを検討する必要があります。

PHP では、任意の順序でレコードを取得してから、PHP で usort() を実行し、次のような方法で分割を処理できるため、実際にははるかに簡単です。

list($c,$r) = sscanf($coord,'%[A-Z]%d');
$c = str_pad($c, 3, ' ', STR_PAD_LEFT);

行/列を分割し、列をパディングして同等の文字列に調整します。しかし、大量のデータを処理している場合、これは非常にメモリを消費する可能性があります。

セルアドレスをキーにした配列を使用し、値をセル値として使用したため、次のようになります。

function cellAddressCompare($a, $b)
{
    sscanf($a,'%[A-Z]%d', $ac, $ar);
    sscanf($b,'%[A-Z]%d', $bc, $br);

    if ($ar == $br) {
        return strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc);
    }
    return ($ar < $br) ? -1 : 1;
}

uksort ($testArray, 'cellAddressCompare');
于 2013-06-02T12:05:25.533 に答える
0

このライブラリを使用することをお勧めします。これは本当に素晴らしく、すばやく簡単に使用できます。

http://faisalman.github.io/simple-excel-php/

これを、データベースからセルの位置を取得するループに入れます。

 use SimpleExcel\SimpleExcel;

 $excel = new SimpleExcel('CSV');
 $excel->loadFile('/home/faisalman/Downloads/test.csv', 'CSV')

 echo print_r($excel->getWorksheet(1)->getCell($mysql_Cpos, $mysql_Rpos));

MySQL のみを使用する場合は、ここで説明されているように、 http : //sourceforge.net/projects/phpexcelreader/ を使用して、Excel ファイルを mysql データベースに事前にインポートできます。

http://major.io/2008/11/07/importing-excel-files-into-mysql-with-php/

その後、通常どおり処理できます。

于 2013-06-02T11:46:11.220 に答える