2012-02-15 27 views
-1

あるSQLデータベーステーブルから別のSQLデータベーステーブルへデータを挿入しようとしています。カタログを作成するために、テーブルのデータをcsvファイルに抽出することを計画しているので、指定した順序で挿入する必要があります。私は私のメインテーブルに50000以上のアイテムがあり、新しいテーブルに約500を抽出したいと思います。指定した順序のSQLテーブルからのINSERT INTO

参照番号の配列を作成する参照番号(ref)を入力するフォームを作成しました。 list.phpで

<form action="list.php" method="post"> 
      <p>List Number <input name="list_no" type="text"></p> 
     <table align="center" width="50%"> 
    <tr> 
     <td><input name="item[]" type="text" style="width: 80px"></td> 
     <td></td> 
     <td><input name="item[]" type="text" style="width: 80px"></td> 
     <td></td> 
     <td><input name="item[]" type="text" style="width: 80px"></td> 
     <td></td> 
     <td><input name="item[]" type="text" style="width: 80px"></td> 
     <td></td> 
     <td><input name="item[]" type="text" style="width: 80px"></td> 
    </tr> 
     </table> 
    <p>Step 4: Create List.<input name="Submit1" type="submit" value="Create List" /></p> 

私は名前のリストと私のデータベースに新しいテーブルを作成するためのコードを作成している...フォームに入力された回数に応じて。私は$ item_list =破を使用しているように、アレイ

$item=$_POST['item']; 

私はアイテムが私がフォームに入力されたためである$のデータを知っているに割り当てられたテーブルからマイデータ(「」、$アイテム) ;入力したデータの順序をチェックし、データをカンマで区切って取得するには、$ item_listをエコーし​​ます。

マイlist.phpページには、新しいテーブルに項目を入力するためのコード

$insert="INSERT INTO list$list_no (ref, description, price_s) 
     SELECT ref, description, price_s 
     FROM stock 
     WHERE ref IN ($item_list)"; 

mysql_query($insert) or die(mysql_error());

を使用しています。それは要求されたすべてのアイテムを入力しますが、元のフォームに入力した順番ではなく、refの順に入力するように見えます。

この問題を解決する方法に関するお考えですか?

多くの方々、ありがとうございます!

$insert = sprintf("INSERT INTO list%s (ref, description, price_s) 
        SELECT ref, description, price_s 
        FROM stock 
        WHERE ref IN ('%s') 
        ORDER BY FIND_IN_SET(ref, '%s')", $list_no, $item_list, $item_list); 

EDIT:あなたは本当にあなたのデータベースの設計を変更する必要があり

+1

refはインデックスのようです。csvへの書き込みのためにSELECTクエリにORDER BY節を追加するだけではありませんか? – CBusBus

+1

プライマリキーとは何ですか?あなたのSQLスキーマを投稿できますか? – CompanyDroneFromSector7G

+4

特定の順序で挿入することは意味をなさない。テーブルの行は**ソートされていません**。 –

答えて

-1

あなたはFIND_IN_SETは順序を保持します、SELECTクエリでrefフィールドでORDER BYする必要があります。これは良いアプローチではありません。

+0

あなたの速い返答をありがとう。 %sは何を表していますか?私はあなたが提案したクエリを実行しただけで、フォームの最初の項目を新しいテーブルに追加しますが、何も追加しません。 データベースを設計することをどのように提案しますか? Thansk – JadeTech

+0

%s - は文字列を表します。最初の%sは$ list_noに置き換えられます。 [sprintf](http://fr2.php.net/sprintf) – Flukey

+0

を参照してくださいありがとう、それは理にかなっています。あなたが投稿した記事では、sprintfはprintfと同じ働きをしていると言いましたので、sprintfをprintfに置き換えてこのエラーを受け取りました: "REFER、description、price_s (45154,64608,26830,66118,65386 ')ORDER BY FIND_IN_SET(ref、' 45154,64608,26830,66118,65386 ')SQL構文に誤りがあります.MySQLサーバのバージョンに対応するマニュアルを参照してください。 1行目で '197'の近くで使用する正しい構文です。私はまだ、最初の項目をテーブルに挿入するだけです。 – JadeTech

0

特定の順序で挿入することは意味がありません。

テーブル内の行は、ではなく、がソートされています。

は、あなたはそれが主キーにインデックスをクラスタ化されていますが原因で、とにかく挿入時の行を次し直すますORDER BY

MySQLを使用して(「リスト」テーブルから)retrievealの間にそれらを並べ替える必要があります。

+0

@Downvoter:コメントを残してください –

0

It needs to be inserted in a specified order

これはありません。

as I am planning on extracting the data in the table to a csv file to create a catalogue.

あなたはこの操作のためにORDER BYを使用して大歓迎です。

I have over 50000 items in my main table and want to extract about 500 into the new table.

もう一度やり直す必要はありません。同じ日付の2つのテーブルを持つことは理にかなっていません。
元のテーブルからCSVを生成できないのはなぜですか?