2

フロリダ州からCSVで送信されたフィードがあり、MySQLに毎日読み込む必要があります。それは私の地域で販売されているすべての家のリストです。1つのフィールドには、コンマで区切られたコードのリストがあります。そのようなサンプルの1つを次に示します。

C02,C11,U01,U02,D02,D32,D45,D67

これらのコードはすべて何か(プール、フェンスで囲まれた領域など)を意味し、別の表にその意味があります。私の質問は、これらのロードをどのように処理する必要があるかということです。CSVの場合と同じように、独自のフィールドに配置する必要がありますか?それらを保持する別のテーブルを作成する必要がありますか?

それらをフィールド(feature_codesと呼ばれる)にそのままにしておくと、説明のあるテーブルから説明を取得するにはどうすればよいですか?そのテーブルは単にfeature_code、feature_code_descriptionです。説明を取り込むために結合を行う最初のクエリでそれらを分解する方法がわかりません。

ありがとうございました

4

4 に答える 4

4

原則として、特にcsv文字列全体ではなく、実際にcsvデータの個々のビットを考慮する必要がある場合は、csvデータをフィールドに保存しないでください。

デザインを正規化し、それらのサブ「フィールド」のそれぞれを独自のテーブルに分割する必要があります。

そうは言っても、MySQLにはfind_in_set()があり、これらのcsv文字列を並べ替えて検索し、それぞれを独自のデータとして扱うことができます。これを使用することは特に効率的ではありませんが、それはデザインに絆創膏を置きます。

于 2012-09-24T15:32:06.107 に答える
1

機能コードに関する情報は、各行が家の識別子と機能識別子のペアである別のテーブルに保持する必要があります

HouseID    FeatureID
1          C07
1          D67
2          D02
于 2012-09-24T15:32:52.013 に答える
0

explode()を使用してCSV文字列を区切ることができます:http://php.net/manual/en/function.explode.php

$string = 'C02,C11,U01,U02,D02,D32,D45,D67';
$array  = explode(',', $string);

次に、feature_codeのリストを使用して、feature_code_descriptionを簡単に取得できますが、すべてのfeature_codesとfeature_code_descriptionを含む配列を取得するには、別のクエリを実行する必要があります。

または、フィールドを分割して、home_idを使用して別のテーブルに配置します。

于 2012-09-24T15:33:32.300 に答える
0

そのままDBに保存でき、読み上げたらphp関数explodeを実行できます。その機能をチェックしてください。それはあなたが望むものによって値を分離する文字列からあなたのために配列を構築します。あなたの場合、あなたは使うことができます:

$array_of_codes = explode(",", $db_return_string);

これにより、各コードから配列が作成され、コード間のコンマで区切られます。幸運を。

于 2012-09-24T15:34:35.317 に答える