1

一部のmysqlで少し問題が発生しています。できる限り多くの背景を説明しようと思います。これが状況です。私は親の植物保育園の可用性を作成し、植物情報をmysqlに保存しました。初めてひどい仕事をしましたが、今はその間に得た新しい知識でやり直しています。

問題の背景として、古いデータベースに2つのテーブルがあり、1つGalleryは次のフィールドで呼び出されていました。

id、、、、、、、、、、、、、、、、、、、、、)。Plant_id_1_ Plant_id_2_ Plant_id_3_ Plant_id_4_ Plant_id_5_ Image1_ Image1_Copyright_ Image2_ Image2_Copyright_ Scientific_ Common_ Category_ Height_ Spread_ Exposure_ZoneDescp

Plant_id_1...フィールドは、次のフィールドidで呼び出される2番目のテーブルのフィールドになります。Availability

id、、、、、、、、)name_ size_ description_ available_ upcomming_price

ご覧のとおり、データについては何も知りませんでしたが(まだ知らない可能性があります)、テーブルの新しい構造について説明します。最初のテーブルはplants次のフィールドで呼び出されます。

id、、、、、、、、、、、、、、、)scientific_name_ common_name_ category_ height_ spread_ exposure_ usda_ description_ image1_url_ image1_copyright_ image2_url_image2_copyright

current次のフィールドで呼び出される2番目:

id、、、、、、、、)plant_id_ size_ available_ upcoming_ price_description

plant_id、テーブル内の対応するプラントのIDになりplantます。

次に問題に移ります。古いテーブルからデータを取得して、新しいテーブルに配置する必要があります。plant私は新しいテーブルのギャラリーからのすべての植物をそこに問題なく持っています。しかし今AvailabilityCurrentテーブルに入る。

Availabilityこれは(私がトップ3を取りました)のエクスポートからの例です:

INSERT INTO `Availability` (`id`, `name`, `size`, `description`,`available`, `upcomming`, `price`) VALUES(91, 'Acer P.''Shishigashira''', ' #5', '30-36"', 27, 0, 36.00); 

INSERT INTO `Availability` (`id`, `name`, `size`, `description`, `available`,`upcomming`, `price`) VALUES(697, 'Arbutus U. ''Compacta''', ' #5','', 0, 0, 16.20); 

INSERT INTO `Availability` (`id`, `name`, `size`, `description`, `available`, `upcomming`, `price`) VALUES(90, 'Acer P.''Shigitatsusawa''', '#15', '', 0, 0, 65.00);

植物のテーブルからを取得しplant_id、それを挿入ステートメントに入れる必要があります。これは、次のようになっていると思います。

INSERT INTO `current` (`plant_id`, `size`,`description`, `available`, `upcoming`, `price`) VALUES(
(SELECT  `id` 
FROM  `plants` 
WHERE  `scientific_name` 
REGEXP  'Acer P.+ ''Shishigashira'''),  ' #5', '30-36"', 27, 0, 36.00);

しかし今、私はテーブルに一致する植物がない場合はどうなるかという新しい問題を抱えているplantので、そこにifnullが必要です。科学的な名前で植物を作成し、残りはnullにします。私はSQLを初めて使用するので、これが私が持っているものであり、機能していません。

INSERT INTO `current` (`plant_id`, `size`,`description`, `available`, `upcoming`, `price`) VALUES(
(IFNULL( SELECT IFNULL( (SELECT `id` 
FROM  `plants` 
WHERE  `scientific_name` 
REGEXP  'Chamaecyparis O.+ Nana'),( 
INSERT INTO  `plants` (`scientific_name`)
VALUES (Chamaecyparis O. 'Nana'))))),  ' #1', '', 0, 0, 9.25);

あなたが見ることができるようにあなたが私を助けるという挑戦に挑戦していると思うならそれは非常に複雑です私は大いに感謝します。誰も助けてくれない場合は、すべてのデータを手動でcurrentテーブルに再入力する必要があります。

4

1 に答える 1

0

新しいテーブルに挿入する必要のあるデータを返す選択に向けて作業する必要があります。それができたら、それをINSERT INTO--SELECT構造にラップするだけです。そうすれば、エクスポートして個別に挿入する必要がありません。セット全体を一度にコピーするだけです。

植物をギャラリーから植物テーブルにコピーするときにIDがそのまま残ることを確認すると、次のような選択で挿入する行が返されると思います。

SELECT 
   Gallery.id as plant_id, 
   Availability.size, 
   Availability.available, 
   Availability.upcoming, 
   Availability.price,
   Availability.description
FROM Gallery 
INNER JOIN Availability
ON Gallery.Plant_id1 = Availability.id

次に、同じことを5回行うことができます。

ON Gallery.Plant_id1 = Availability.id

に(1つずつ)

ON Gallery.Plant_id2 = Availability.id
ON Gallery.Plant_id3 = Availability.id
ON Gallery.Plant_id4 = Availability.id
ON Gallery.Plant_id5 = Availability.id

または、各選択の間にUNION ALLを使用して、それらすべてを1つの巨大なSQLステートメントにまとめます。

于 2011-08-31T17:03:23.327 に答える