2017-03-03 5 views
0

私は1つの列に複数のデータがセミコロンで区切られたMySQL DBを持っています。私は最初のものを使う必要があります。どのようにこの種の格納されたデータに対処するための最良の推奨方法は何ですか? (この特定の問題と、セミコロンで区切られたデータの一般的な使い方についても)。MySQLテーブルのセミコロンで区切られたデータを処理します

+0

データを標準化し、区切られたデータを1つのフィールドに保存しないでください。理由の詳細については、http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-badを参照してください。 – Shadow

答えて

0

Q:「何が保存されたこの種のデータに対処する最善の方法を推奨される方法です?」

A:最高勧告はカンマ区切りのリストとして格納したデータを避けることです。 (。そして、いや、これはないは、我々は、リスト内の区切り文字としてコンマの代わりにセミコロンを使用する必要がありますどういう意味)

を、このトピックの導入については、私はビルKarwinの本の中で、第2章の見直しをお勧めします。 " SQLアンチパターン:ここ

https://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557

およびその他の細かい書店からの便利な利用できるデータベースプログラミング」

の落とし穴を回避します。セミコロン区切りのリストから最初の要素を取得するには


...一瞬のために取ってその勧告を設定し、我々はSUBSTRING_INDEX機能を使用することができます。デモンストレーションとして

SELECT SUBSTRING_INDEX('abc;def;ghi',';',1) 

リターンが

'abc' 

のMySQL SUBSTRING_INDEX機能がここに文書化されている:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index


私はこれが唯一の「リンクと見なされるかもしれないことを認識回答"。この質問に対する良い答えは、カンマで区切られたリストを格納するという落とし穴を示す例を挙げて、ずっと長くなるでしょう。

リストの内容を調べる必要なしに、データベースがカンマで区切られたリストをデータのまとまりとして表示する場合は、格納する方法と同様に保存することを検討しますデータベース内の.jpg画像。

私は、BLOB、つまりブロックの一部として.jpgイメージ全体を格納して取得します。全体を保存し、全体を検索します。私は、データベースに画像の内容を操作させるつもりはない。私は、画像を調べてjpg画像の "中"の情報を識別するためにデータベースに依頼することはありません。私はそれから意味のある情報を得るためにデータベースに頼むつもりはありません...写真には何人の人がいるのですか?写真の人の名前は何ですか?写真に人を加えるなど。

jpgイメージを扱うように、コンマで区切られた(またはセミコロンで区切られた)区切りのリストを、オブジェクトであることを意図している場合は格納しません。これは不透明なバイトブロックです。

0

使用

SELECT SUBSTRING_INDEX(column_name, ';', 1) from your_table

+1

あなたは、回答コードを説明する必要があります。 – Blackbam

+0

もしそれが複雑なら私は持っているだろう – Utsav

関連する問題