1

フォームから送信された「items」値が別のテーブル名「order」に存在しない「user」という名前のテーブルに、フォームから複数のレコードを挿入したいと思います。'order'テーブルにはidとitemsの2つのフィールドしかありません。

これが私のコードです:

INSERT INTO user (id, username, email, address, items)
SELECT '$username1', '$email1', '$address1', '$items1'
UNION ALL
SELECT '$username2', '$email2', '$address2', '$items2'
UNION ALL
SELECT '$username3', '$email3', '$address3', '$items3'
FROM DUAL 
WHERE NOT EXISTS(SELECT item FROM order)

'items'テーブルに2つのsetitデータが含まれているとします。

  id        items
1         table01 
2         chair01

したがって、次のデータを挿入すると、次のようになります。

john, john@hotmail.com, 12, Street, nail01 
jennifer, jennifer@yahoo.com, 13, Street, table01
peter, peter@live.com, 14, Street, spoon01
(defintely these data are keyin in the form)

'items'テーブルにはすでにこのアイテムが含まれているため、2番目のレコードは'user'テーブルに挿入されないとします。しかし、結果として、1番目と2番目のデータは「user」テーブルに挿入されますが、3番目のデータは挿入されません。私は他のコードで何度も試しましたが、それでも成功しません。

誰かが私に提案を与えることができますか?ありがとう。

4

2 に答える 2

0

私はあなたがやろうとしていることと少し混乱しています。私が間違っている場合は修正してください。しかし、これはあなたの質問から私が理解していることです:

フォームからユーザー テーブルにデータを追加したいが、アイテム テーブルにまだ存在しないアイテムを注文したユーザーのみを追加したいですか?

------ これで確定 ------

そうですね、これが私がそれを行う方法です。

そのため、POST メソッドを使用してフォームからデータを収集しています。

$_POST['email'] など。収集されたデータが 100% クリーンであることを確認したいので、私が作成した便利で小さな cleanString 関数を使用します...

function cleanString($var)
{
    $var = strip_tags($var); //Removes all HTML tags
    $var = htmlentities($var); //Converts characters into HTML entities
    $var = stripslashes($var); //Removes any backslashes
    return mysql_real_escape_string($var); // Escapes all special characters
}

そして、このように使用します...

$email = cleanString($_POST['email']);
$item = cleanString($_POST['item']);

等...

すべてのクリーンデータを使用して、注文テーブルからアイテムが存在するかどうかを確認します。したがって、次の行に沿ってクエリを実行します。

$query = "SELECT items FROM order WHERE items=".$item;
$result = mysql_query($query);

次に、結果が見つかったかどうかを確認します

if(mysql_num_rows($result) > 0)
{
    // Result found do not process...
}
else
{
    // Result not found, process...
    $query = "INSERT INTO user ...";
}

一度に複数の挿入を行っている場合は、これをすべてwhileまたはforeachループでラップして、すべてを一度に処理できます。フォームからのものだと考えていますが、一度に1つの入力しかないと思いますか?

お役に立てれば。

------- while ループの追加 ------

一度に複数のレコードを追加したいのですが、これはフォームからデータを収集する方法に完全に依存します.正確な答えを得るには、フォームからデータを収集する方法についてもう少し情報が必要です. 一度に 3 人を追加するために各フィールドを 3 つ持っていますか、それとも後で処理するためにすべてのデータを配列に保存していますか?

すべてを配列に入れている場合、これらの線に沿った何かが機能します

foreach ($array as $user)
{
    $item = $user['item']
    etc...

    $query = "SELECT items FROM order WHERE items=".$item;
    $result = mysql_query($query);

    if(mysql_num_rows($result) > 0)
    {
        // Result found do not process...
    }
    else
    {
        // Result not found, process...
        $query = "INSERT INTO user ...";
    }
}

これにより、各ユーザーが 1 人ずつ取得され、そのユーザーのすべてのデータが取得され、アイテムが存在するかどうかが確認され、存在しない場合は処理されます。

while ループで行うこともできますが、この方法は、データを取得する方法を知らずに説明するのは困難です。

于 2011-09-23T09:37:02.160 に答える
0

これはOracleの構文のように思えます...そうですか?

INSERT INTO user (id, username, email, address, items)

ID を挿入する必要がありますが、これは行わないでください。シーケンスとトリガーによって設定されていれば問題ありませんが、挿入する必要はありません。

INSERT INTO user (username, email, address, items)
SELECT '$username1', '$email1', '$address1', '$items1'
UNION ALL
SELECT '$username2', '$email2', '$address2', '$items2'
UNION ALL
SELECT '$username3', '$email3', '$address3', '$items3'
FROM DUAL 
WHERE NOT EXISTS(SELECT item FROM order)
  • 各ユニオンパートに「FROM DUAL」が必要です
  • WHERE句は3番目の選択にのみ影響します
  • また、あまり意味がありません。「テーブルの順序に行がない場合は、この行を選択してください」。除外を指定する必要があります。結合 (WHERE a.items = items) を追加したので、アイテムが既に存在する注文テーブルに行が存在しない場合にのみ、行が挿入されるようになりました。危険なようです。これについてさらに情報を提供する必要があります。

おそらくあなたが意味した

INSERT INTO user (username, email, address, items)
SELECT username, email, address, items FROM (
   SELECT '$username1' username, '$email1' email, '$address1' address, '$items1' items
     FROM DUAL
   UNION ALL
   SELECT '$username2' username, '$email2' email, '$address2' address, '$items2' items
     FROM DUAL
   UNION ALL
   SELECT '$username3' username, '$email3' email, '$address3' address, '$items3' items
     FROM DUAL
) a
WHERE NOT EXISTS(SELECT 1 FROM order WHERE a.items = items)

テーブル「注文」の「アイテム」列に一意のキーが定義されている場合、はい、新しいアイテムを挿入しようとすると挿入が失敗します。最初に注文テーブルにクエリを実行して、このアイテムが既に存在するかどうかを確認し、存在しない場合は作成することをお勧めします。

AdriftUniform が言うように、より明確な情報が必要です!

于 2011-09-23T09:58:23.693 に答える