2016-10-18 31 views
1

私のスキーマはこれです:複数のテーブルに影響する値を挿入するにはどうすればよいですか?

Tables: 
Titles ->   ID |  TitleID | TitleName | ArtistNameFull | Length 
Artists->   ID | ArtistNameRoot 
ArtistRelation-> ID | TitleID | ArtistID | Relationship 

ArtistNameFullを含むアーティスト名を次のとおりです。 "偉業、となど、プレゼント、などの特徴"

ArtistNameRootは「feat、including、featuring、etc.」のないアーティストです

ArtistRelationにおけるそれらの関係は、インデックス1〜15とそれに対応する「接尾辞」を基本とする別のテーブルにあります。 inと同様に、index 3は "フィーチャー"で、index 7は "with"です。

テーブルに挿入する必要があるデータの行が約1000行あります。これは(タイトル、アーティスト、長さ)の値です。

これまでのメソッド: これまでの方法では、挿入する必要があるすべてのデータを一時テーブル自体に配置してから、タイトルテーブルと一時テーブルの間で一意の値を選択するSQL関数を呼び出して挿入していましたこれはTitlesテーブルだけに挿入すると機能しますが、アーティストに挿入する必要があります。これは、ルートアーティスト以外のものを取り除く必要があるため、少し難しいです。だから私は一時的なテーブルからデータを取得するために、正規表現を使用して、ルートアーティストだけを取得するための不思議に動作するルートアーティストを取得するために、これらのすべてを一緒に接続し、前の挿入からのアーティストが既に私の頭の周りを包むのは難しいかもしれない。

とにかく、私はこれを本当に効率の悪い方法で行っている場合、あるいはそれが通常行われる方法であり、私はちょうど行く必要があるため、知恵の言葉が必要だと思います。

+0

あなたが何を求めているのか分かりません。コードを修正する方法を知りたい場合は、試したことを投稿する必要があります。 – Barmar

+0

これは非常に扱いにくいもののようです。 "Christmas Presents"という名前のグループがあれば、 "presents"という言葉は関係語のように見えます。このようなものを解析するにはインテリジェンスが必要です。 – Barmar

+0

私は本当にコードが間違っていることに心配していません。私は本当にこれについてどうやって行くべきかを知る必要があるからです。質問は本質的には、アーティストとArtistRelationが挿入からタイトルへの更新(このメソッドが適用されている場合)が必要な場合、私が自分のテーブルに持っているデータを挿入する方法です。 @Barmar – DJSweetness

答えて

1

PHPは文字列を操作する際にSQLより優れています。だからそれを続けてください。また、一時表を使用する方法も有効です。

PHPを使用して、すべてのデータを一時テーブルから取得する必要があります。

各結果について、アーティスト名を解析してアーティストに挿入します。

最後に挿入されたID(PDOとmysqli_にはこのためのメソッドがあります)を取得し、そのIDとアーティスト名を後で使用できるように配列に格納します。

タイトル情報を挿入します。

最後に挿入されたIDを取得してそれを使用し、アーティストIDを使用してリレーションテーブルにレコードを挿入します。

これは役に立ちますか?

+0

これは大きな助けです。ありがとうございました! – DJSweetness

関連する問題