0

foreach() を使用して配列データを MySQL データベースにプッシュしようとしています。私は PHP と mysql の初心者なので、このデータを Ajax スクリプトから PHP に解析する作業を行ってきましたが、今はデータを操作するだけです。

配列内の各データセットが別々の行になるように、このデータを SQL にプッシュする正しい構文は何ですか?

私はforeachを使用しようとしていますが、複雑さは配列自体のサイズが変わる可能性があることであり、2番目の複雑さはデータ自体が更新される可能性があることです(つまり、新しい日に同じIDの新しい値)。追加するだけでなく情報を更新するインテリジェンス。古いデータを別のテーブルにバックアップすることもできます。

この構文は正しいですか?

$sql = "INSERT INTO table1 (col1, col2) VALUES ";
foreach($rows as $i=>$row) {
    if ($i>0) {
        $sql .= sprintf(",(%s,%s)", $row["col1_value"], $row["col2_value"]);
    } else {
        $sql .= sprintf("(%s,%s)", $row["col1_value"], $row["col2_value"]);
    }
}
mysql_query($sql);

配列内のデータは次のとおりです。これは多次元配列の一部にすぎませんが、必要に応じて配列の残りの部分を操作する方法を見つけました。

私がする必要がある他の唯一のことは、座標フィールドを取得して次のように操作する方法を見つけることです

座標から x と y のデータを抽出する x と y を 600/386 倍にする x と y を反転し、各座標の最初の桁を取得して新しい値 y[1]x[1] を作成します。

このために、次のように最初のデータセットだけを試しましたが、PHP でのデータ処理に不慣れです。確かにそれは間違っています。

$testcoords = $_POST['data'][0]['coords'];
list($x,$y) = explode(“:”,str_replace(“’”,“”,$testcoords));
$xtrans = number_format($x*600/386,$decimals=null);
$ytrans = number_format($y*600/386,$decimals=null);
$cont = “C”.$ytrans[0].$xtrans[0]

要約すると、3つの質問

  1. [data] 配列内の個々のデータセットごとに行を含むテーブルにデータを転送するにはどうすればよいですか?
  2. 単純に連結するのではなく、テーブル内の既存の値を上書きしてアーカイブするにはどうすればよいですか?
  3. 特定の文字列を操作して、上記で定義したカスタム変数を返すにはどうすればよいですか?

    [data_type] => city
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 16515340
                    [owner_id] => 3475
                    [owner] => Player1
                    [coords] => '268:252
                    [name] => AC2013
                    [score] => 11863
                    [city_type] => castle
                    [location] => land
                )
    
            [1] => Array
                (
                    [id] => 16515335
                    [owner_id] => 3475
                    [owner] => Player1
                    [coords] => '263:252
                    [name] => AC2013
                    [score] => 7
                    [city_type] => castle
                    [location] => water
                )
    
            [2] => Array
                (
                    [id] => 17891610
                    [owner_id] => 3523
                    [owner] => Player2
                    [coords] => '282:273
                    [name] => City of Repoman9900
                    [score] => 1978
                    [city_type] => castle
                    [location] => water
                )
    
            [3] => Array
                (
                    [id] => 10616856
                    [owner_id] => 73
                    [owner] => Player2
                    [coords] => '024:162
                    [name] => 1killer
                    [score] => 1308
                    [city_type] => castle
                    [location] => water
                )
    
            [4] => Array
                (
                    [id] => 10813465
                    [owner_id] => 2862
                    [owner] => Player3
                    [coords] => '025:165
                    [name] => City of vuvuzea991
                    [score] => 1091
                    [city_type] => castle
                    [location] => land
                )
    
            [5] => Array
                (
                    [id] => 17367317
                    [owner_id] => 84
                    [owner] => Player4
                    [coords] => '277:265
                    [name] => Dreadland
                    [score] => 776
                    [city_type] => castle
                    [location] => water
                )
    
            [6] => Array
                (
                    [id] => 2162850
                    [owner_id] => 2989
                    [owner] => Player5
                    [coords] => '162:033
                    [name] => City of Dinoeyez
                    [score] => 157
                    [city_type] => castle
                    [location] => water
                )
    
            [7] => Array
                (
                    [id] => 2818192
                    [owner_id] => 556
                    [owner] => Player6
                    [coords] => '144:043
                    [name] => City of wildfire123
                    [score] => 7
                    [city_type] => castle
                    [location] => water
                )
    
        )
    
    [sender] => Array
        (
            [world] => Array
                (
                    [id] => 232
                    [name] => Server 4 
                    [number] => NaN
                )
    
            [alliance] => Array
                (
                    [id] => 2
                    [name] => Alliance2
                )
    
            [player] => Array
                (
                    [id] => 98
                    [name] => SuperUser
                )
    
            [browser] => Array
                (
                    [type] => Chrome
                    [version] => 25.0.1364.160
                )
    
            [aix_version] => 1.00
        )
    

    )

4

1 に答える 1

0

私が見る問題:

foreach($rows as $i=>$row) {
      $sql = "INSERT INTO table1 (col1, col2) VALUES ";  //reinitialize here.
      if ($i>0) {  //Why have the if statement, the results of the conditions are the same.
        $sql .= sprintf("('%s','%s')", $row["col1_value"], $row["col2_value"]);  //add quotation marks for string values, remove the comma.
      } else {
        $sql .= sprintf("(%s,%s)", $row["col1_value"], $row["col2_value"]);
      }
      mysql_query($sql); //execute the statement here.
   }

その他の質問:

単純に連結するのではなく、テーブル内の既存の値を上書きしてアーカイブするにはどうすればよいですか?

更新ステートメントを上書きするには、MySql Web サイトで構文のヒントが提供されています。

アーカイブするには、アーカイブされるテーブルのほぼ複製であるアーカイブ テーブルを作成し、そのテーブルを挿入/更新する必要があります。

このコンテキストでは、連結の意味がわかりません。正規化されたデータベースには実際には当てはまりません。

特定の文字列を操作して、上記で定義したカスタム変数を返すにはどうすればよいですか?

ああ、それはスキップします。1 つの投稿で質問することはたくさんあります。

于 2013-04-02T15:53:04.553 に答える