4

データベースに 2 つのテーブルがあり、それぞれにカテゴリという名前の列があります。

Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | product | category_name
1  : adsl 1G : basic
2  : adls 2G : midlevel
3  : adsl 3G : highlevel
4  : adsl 4G : profesional

テーブルの *category_name* を更新するときにcategories、テーブルでも変更したいのProductsですが、これを行う方法がわかりません。

正しい言い方がわからないので、見つけて答えることができませんでした。

どんな助けでも大歓迎です。

私のupdate.phpは今どのように見えますか:

     db_update("UPDATE category SET 
    `category_name` = '".$_POST['category_name']."'
     WHERE category_id = '".$id."'");

どのように見えるべきですか:???

{ここにコード}

注: 「修正済み - 古い値を save.php ファイルに送信するのを忘れていたため、$id は何を更新すればよいかわかりませんでした」.

4

8 に答える 8

4

両方の名前を変更して 2 つのクエリを実行するだけです。

<?php
mysql_query("UPDATE categories SET category_name='" . $catname . "' WHERE category_name='basic'");
mysql_query("UPDATE product SET category_name='" . $catname . "' WHERE category_name='basic'");
?>

1 つの文字列で実行したい場合は、複数のクエリ、結合クエリ、またはストアド プロシージャを使用して実行できます。

1 つの文字列内の複数のクエリ:

<?php
    mysql_query("
        mySqlQuery(UPDATE categories SET category_name='" . $catname . "' WHERE category_name='basic';)
        mySqlQuery(UPDATE product SET category_name='" . $catname . "' WHERE category_name='basic';)
    ");
?>

結合クエリ:

<?php
mysql_query("
    UPDATE `product`,`categories`
    SET `product`.`category_name` = '" . $catname . "',
        `categories`.`category_name` = '" . $catname . "'
    WHERE `items`.`id` = '" . $catname . "'
");
?>

上記のいずれも機能しない場合は、一致する名前ではなく一致する ID になるようにテーブルを変更することをお勧めします。

次のものが得られます。

Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | category_ID | product
1  : 1           : adsl 1G
2  : 2           : adls 2G
3  : 3           : adsl 3G
4  : 3           : adsl 4G
于 2012-04-13T12:23:20.000 に答える
1
UPDATE Categories t1 
JOIN Product t2 ON (t1.category_name  = t2.category_name ) 
SET t1.category_name = ?
    t1.category_name = ?
WHERE t1.id = ?

しかし、あなたは自分のデータ モデルが醜いと感じています。非正規化したほうがいいかもしれません...

製品テーブルでカテゴリ テーブルを参照するようにします。

Product Table - 
id | product | category_ID

Categories Table -
id | category_name
于 2012-04-13T12:23:35.243 に答える
1

カテゴリ テーブルの「id」フィールドを使用して、製品テーブルをカテゴリ テーブルにリンクすることをお勧めします。このようにして、同じカテゴリにリンクされ、同じカテゴリ ID にリンクしているため、他のものを壊す心配なくカテゴリ名を変更できます。

次の点を考慮してください。

Categories Table - id | category_name 1 : basic 2 : midlevel 3 : highlevel 4 : profesional

Product Table - id | product | category_id l : adsl 1G : basic 2 : adls 2G : midlevel 3 : adsl 3G : highlevel 4 : adsl 4G : profesional

現在行っている方法は、将来何らかの方法でカテゴリを使用する別の列を追加する必要があり、これらすべてのテーブルの「category_name」列を変更し続ける必要があるため、維持するのが非常に難しいようです。非常に厄介になります。ID にリンクすることにより、他のテーブルへのリンクが失われることを心配することなく、カテゴリ テーブルに好きな変更を加えることができます (これは現在のテーブルで起こることです)。

編集: INNER JOINS などの結合を使用して、カテゴリに関する情報を取得できます。これはより良いアプローチになると思います。また、製品テーブルの「category_id」列とカテゴリ テーブルの「id」列の間に関係を追加することも検討してください。これにより、リンクされた製品がまだある場合でも、カテゴリが削除されることはありません。

于 2012-04-13T12:24:45.693 に答える
1

あなたが言及した製品とカテゴリのような関係があるときはいつでも、次のような構造を持つ方が常に良いです:

Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | product | category_id
1  : adsl 1G : 1
2  : adls 2G : 2
3  : adsl 3G : 3
4  : adsl 4G : 4

したがって、製品のカテゴリ名を表示する必要があるときはいつでも、結合を使用して実行できます。したがって、この変更により、問題を解決できるようになります。

于 2012-04-13T12:25:55.910 に答える
0

なぜあなたがcategory_name両方のテーブルにいるのかわかりません、私が見る限りそれは無意味に思えます。

理想的には、テーブル構造は次のようになります。

Categories Table -
id | category_name
1  : basic
2  : midlevel
3  : highlevel
4  : profesional

Product Table - 
id | product | category_id
1  : adsl 1G : 1
2  : adls 2G : 2
3  : adsl 3G : 3
4  : adsl 4G : 4

これにより、製品テーブルで何も変更しなくても、カテゴリテーブルでカテゴリの名前を変更できます。

次に行う必要があるのは、SELECTクエリで2つのテーブルを結合することです。例:

SELECT * FROM `categories`,`products` WHERE `categories`.`id`=`products`.`category_id`
于 2012-04-13T12:26:49.407 に答える
0

これが役立つことを願って試してください

$query = "UPDATE tblname SET colname = '$var';";
$query .="UPDATE tblname1 SET colname1 = '$var1';";
/* execute multi query */
if (mysqli_multi_query($conn, $query)) {
    do {
        /* store first result set */
        if ($result = mysqli_store_result($conn)) {
            while ($row = mysqli_fetch_row($result)) {
             printf("%s\n", $row[0]);
            }
            mysqli_free_result($result);
        }
        /* print divider */
        if (mysqli_more_results($conn)) {
            printf("");
        }
    } while (mysqli_next_result($conn));
}

http://php.net/manual/en/mysqli.multi-query.php

于 2016-03-02T09:22:41.017 に答える
-1

はい、私もこの問題に遭遇していました。ここが手がかり!これを試してください、

$sql = "UPDATE categorise c, product p SET category_name='$cate' ";
$sql = $sql. "WHERE c.id=p.id AND c.id like "."\"".$cate."\" ";
于 2015-05-04T12:58:39.863 に答える