0

配列をmysqlテーブルに更新する必要があります。

これは私の配列です

[cat2] => Array
                (
                    [0] => 34
                    [1] => 48
                    [2] => 49
                    [3] => 46
                )

34,48,49,46としての出力を、shopsというテーブルとcategoryという列に移動したいと思います。これは私が書いたコードです。$shop['cat2']には上記で投稿した配列が含まれています。私を助けてください。このコードは、列カテゴリのすべてのフィールドで34のみ保持されます

foreach ($shop['cat2'] as $k => $v) {
    $query = "UPDATE shops SET categories2=$v";
    mysql_query($query);
    }
4

2 に答える 2

0

これらの各配列要素を列の1つの行に適用するにはcategory、最初にテーブルから一意のIDをフェッチし、更新クエリの句shopsでその一意の識別子の値を使用してループする必要があります。WHERE

mysql_fetch_assoc()ループ内を呼び出して、 foreach()1つの配列要素ごとに1つの行をプルします。shops.idこれは、ショップごとの一意の識別子で ある列があることを前提としています。

// If `id` is not the unique id per shop, substitute the correct column
$rowids = mysql_query("SELECT id FROM shops ORDER BY id");
if  ($rowids) {
  // Loop over your array, and do one update per array elem
  foreach ($cat2 as $cat) {
     $row = mysql_fetch_assoc($rowids);
     $id = row['id'];
     // Your values are ints, so no need to quote and escape.
     // If you do use other string values, be sure to mysql_real_escape_string() them and single-quote
     $upd = mysql_query("UPDATE shops SET category = $cat WHERE id = $id");
     // Report error on this iteration
     if (!$upd)  {
        echo "error updating $id" . mysql_error();
     }
  }
}
else {
   echo "Couldn't get row ids. " . mysql_error(); 
}
于 2012-10-15T15:02:55.573 に答える
0

implode関数を調べてください。implode(",", $shop['cat2'])

また、外部キーを調べることもできます。外部キーを使用する場合、joinSQLステートメントを使用して複数の列からデータを取得できます。あなたの例のように、カテゴリを1つのフィールドとして保存する場合、これは不可能です。

そのための新しいテーブルが必要にShopCategoryなります。columns:ShopIDと、を使用すると、これらの列はそれぞれとテーブルCategoryIDに対して外部キー関係になります。ShopCategory

Michael Berkowskiがコメントですでに指摘しているように、where句を使用しない場合、このSQLステートメントはすべてのショップのカテゴリを更新します。

$query = "UPDATE shops SET categories2='".implode(",", $shop['cat2'])."' WHERE id=".$shop;

于 2012-10-15T14:56:34.413 に答える