2

私はさまざまなレストランのディレクトリを一覧表示するサイトに取り組んでおり、現在、新しいCMSに切り替える過程にあります。私が抱えている問題は、両方のCMSがレストランのデータを異なる方法で表現していることです。

古いCMS

相互参照データベース。次のような例のエントリが一覧表示される場合があります。

ID / FieldID /ItemID/データ

3/1/6/123フーストリート

4/2/6/バー

FieldID 1を通り、FieldID2を都市として参照する1つの参照テーブル。

ItemID6をDeliciousRestaurantとして参照する別の参照テーブル。

新しいCMS

サンプルリストを設定したときのデータベースの新しいCMSでの方法は、すべて直接行であり、相互参照はありません。したがって、代わりに同じレストランのデータは次のようになります。

ID/名前/通り/市

3/おいしいレストラン/123Foo Street / Bar


約2,000のレストランのリストがあるため、SQL行のデータサイズの点ではそれほど多くはありませんが、もちろん、すべてのレストランのリストを手動で再入力することを検討することすらできません。

私にはいくつかのアイデアがありますが、それは非常に汚くて時間がかかります。私はMySQLの専門家ではないので、どのように取り組むべきかについていくつかのアイデアを求めてここにいます。

助けてくれる人たちに感謝します。

4

1 に答える 1

3

データテーブルに対して複数回結合して、次のようなものを取得できます。

insert into newTable
select oldNames.ItemID,
       oldNames.Name,
       oldStreets.data,
       oldCities.data
from   oldNames
    inner join oldData as oldStreets on oldNames.ItemID = oldStreets.ItemID
    inner join oldData as oldCities on oldNames.ItemID = oldCities.ItemID
    inner join oldFields as streetsFields 
        on oldStreets.FieldID = streetsFields.FieldID
        and streetsFields.Name = 'Street'
    inner join oldFields as citiesFields 
        on oldCities.FieldID = citiesFields.Field
        and citiesFields.Name = 'City'

すべてのテーブルに名前を付けなかったので、いくつか名前を付けました。抽出する必要のあるフィールドがさらにある場合は、この種のクエリを拡張するのは簡単です。

于 2009-10-20T02:17:52.923 に答える