-2

内部結合を使用して2つのテーブルからid、catid、name、subofを取得するSQLクエリを実行しています。

select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name

これで必要なすべての結果が得られましたが、結果をループして、subof 値 (値であり、値は shop_cat の ID 番号) に対して別の SQL クエリを実行する必要があります。subof 値の catname # を取得し、結果/配列フィールド subof を猫の名前に更新する必要があります。

したがって、元のクエリで subof の値が 15 になった場合、shop.cat から catname を選択します。ここで、id='15' はそのクエリから catname を取得し、元の値ごとに subof = catname を更新します。 subof 値を持つ結果。

EDIT 3/23/13 12:30pm MST: Opeyemi が書いたコードをもっと使って、私が必要なものをもっと説明します。他にどのように説明すればよいかわかりません...

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name";
$r = mysql_query();
while(list($shopid, $catid, $name, $catname, $subof) = mysql_fetch_array($r)) {
    $getname = mysql_query("select catname from shop_cat where id='$subof'");
    $rowname = mysql_fetch_assoc($getname);
    //code to update array to change value of $subof to new $rowname['catname']
}

DB クエリが実行され、値が取得されます。

次に、PHP がクエリから取得したすべての結果をループする何らかのループを実行する必要があります。このループは subof 値 (整数の ID 番号) を取得し、クエリを実行してその整数値の値 catname を取得します。次に、ループは現在の結果を更新し、subof 値を整数からループ内の DB から取得した catname に変更します。

いつでもデータベースを更新する必要はありません。最初のクエリから結果/配列を更新する必要があります。

4

3 に答える 3

1

あなたがする必要があるのは、結果セットを配列に格納し、配列内で置き換えることです。

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name";
$r = mysql_query();
$dataset = array();
// Store result in an array
while($assoc = mysql_fetch_assoc($r)) {
  $dataset[] = $assoc;
}
// Update array
foreach($dataset as $data) {
  $getname = mysql_query("select catname from shop_cat where id='{$data['subof']}'");
  $rowname = mysql_fetch_assoc($getname);
  // replace data
  replace_dataset($data['subof'], $rowname);
}

function replace_dataset($key, $newname) {
  global $dataset;
  foreach($dataset as $k => $data) {
    if ($data['id'] == $key)
      $dataset[$k]['subof'] = $newname;
  }
}
于 2013-03-24T04:02:20.333 に答える
0

mysql_fetch_assoc() または mysql_fetch_array() または mysql_fetch_row() 関数を使用して行をフェッチし、それにループの概念を適用できます。

その後、mysql_fetch_field() を使用して、そこからフィールド subof と id を取得できます。

その後、データベースを更新します

以下のリンクで確認できます

http://www.php.net/manual/en/function.mysql-fetch-array.php

http://www.php.net/manual/en/function.mysql-fetch-assoc.php

http://www.php.net/manual/en/function.mysql-fetch-field.php

理解していただければ幸いです。

于 2013-03-23T09:06:58.130 に答える
0

PHPでこれを行う方法を尋ねていますか、それとも何ですか? PHPで結果をループする方法を探しているなら、これと同じくらい簡単です

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name";
$r = mysql_query();
while(list($shopid, $catid, $name, $catname, $subof) = mysql_fetch_array($r)) {
  // the values from the query are assigned to the variables
  // $shopid, $catid, $name, $catname, $subof in that order already
  mysql_query("update shop_cat set subof=catname where id='$subof'");
  // My interpretation of your query can be wrong though
  // But you should get the idea
}
于 2013-03-23T08:19:21.957 に答える