web-dev-qa-db-ja.com

$ wpdb->主キーの置換/置換または更新

データベーステーブルにデータを保存するコードを書きます。

行が存在する場合はテーブル内の行を置き換え、行がまだ存在しない場合はテーブルに新しい行を挿入します。

http://codex.wordpress.org/Class_Reference/wpdb

$wpdb->replace関数を使用してから、コードの最後に$wpdb->insert_idを追加します。

すべてのフィールドを更新するには、replace 'id'を使用します。これが主キーです。

Idフィールドを配列に追加します

   $wpdb->replace( $wpdb->prefix . 'fafa', 
   array( 
   'id',
   'title' =>  trim($row->item(0)->nodeValue) ,
   'liveprice' =>  trim($row->item(2)->nodeValue)  ,
   'changing' =>   trim($row->item(4)->nodeValue)  ,
   'lowest' =>   trim($row->item(6)->nodeValue)  ,
   'topest' =>   trim($row->item(8)->nodeValue)  ,
   'time' =>   trim($row->item(10)->nodeValue)   ), 
   array( 
   '%d',
   '%s',
   '%s',
   '%s',
   '%s',
   '%s',
   '%s'
) );
 $wpdb->insert_Id;
1
Mortzea

あなたはこのソリューションを使用することができます..

カスタムデータベーステーブルからすべてのレコードを削除する、または空にする方法

この解決策では、まずすべてのレコードを削除してから新しいレコードを挿入します。

($ deleteを実行するとエラー 'No find row'が発生するので、クエリを削除する前にテーブルにレコードがあるはずです)そしてreplaceを使用する必要はありませんinsert

関数の前に次のクエリを追加してください。 (このクエリはすべてのレコードを削除します)

$delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`");




$delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`"); /// delete all records

   $wpdb->insert( $wpdb->prefix . 'fafa', 
   array( 
   'title' =>  trim($row->item(0)->nodeValue) ,
   'liveprice' =>  trim($row->item(2)->nodeValue)  ,
   'changing' =>   trim($row->item(4)->nodeValue)  ,
   'lowest' =>   trim($row->item(6)->nodeValue)  ,
   'topest' =>   trim($row->item(8)->nodeValue)  ,
   'time' =>   trim($row->item(10)->nodeValue)   ), 
   array( 
   '%s',
   '%s',
   '%s',
   '%s',
   '%s',
   '%s'
) );

前に走る

:コードがループ内にある場合は、ループの前にこのクエリを挿入してください。

     $delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`");
    foreach (){

// code

    }
1
amir rasabeh

replaceは、指定した列の値の1つがprimary keyまたはuniqueインデックスで、その値が既存の行と同じ場合にのみ行を置き換えます。テーブルにprimary keyインデックスもuniqueインデックスもない場合は、常に新しい行のみが挿入されます。何かを削除して新しい行を挿入する必要があるかどうかを判断するには、まず既存のデータをクエリする必要があります。

詳細はMySQLのドキュメントの REPLACE を参照してください。

5
Milo

この質問に対する回答からは明確な答えが得られず、選択された答えが正しいことがわかりません。質問ではテーブル内のすべての行を削除することについては何も言わず行内の値それで、少し遅れているが、答えはここにある:

Replaceにidがあるreplace()関数を使用している場合、それはレコードが最初に存在する可能性があることを意味しますそうでなければあなたは常にinsert()関数に直接進むでしょう新しいレコードを追加します。したがって、レコードが存在するかどうかを定義する主キー(id)以外のフィールドが必要です。上記の例では、タイトルが、新しいレコードが必要かどうか、またはレコード内のフィールドを更新する必要があるかどうかを定義する重要なフィールドであるとします。

私は常にget_var()関数とreplace()関数を次のように使用します。

次のようにidがreplace関数に渡されるように、レコードが(重要なフィールドに対して)存在するかどうかを最初に確認します。

$recID = $wpdb->get_var( "SELECT id FROM ".($wpdb->prefix . 'fafa')." WHERE title LIKE ".$title."'");

新しいレコードを作成するか、見つかった$ recIDのフィールドを更新するreplace関数を使用してください。

$wpdb->replace( $wpdb->prefix . 'fafa', 
   array( 
    'id'        => $recID,
    'title'     => trim($row->item(0)->nodeValue) ,
    'liveprice' => trim($row->item(2)->nodeValue) ,
    'changing'  => trim($row->item(4)->nodeValue) ,
    'lowest'    => trim($row->item(6)->nodeValue) ,
    'topest'    => trim($row->item(8)->nodeValue) ,
    'time'      => trim($row->item(10)->nodeValue) ), 
   array(
    '%d', '%s', '%s', '%s', '%s', '%s', '%s' )
);

最後に、置き換え後、AUTO_INCREMENTカラムから生成されたIDには、次のコマンドを使用してアクセスできます。

$wpdb->insert_id;

これがオリジナルと同様の質問をしている人に役立つことを願っています。

1
Clinton