web-dev-qa-db-ja.com

Wpdbを使用して挿入する前に重複レコードをチェックする方法

WordPressデータベースのカスタムテーブルに行を挿入しています。これはコードです:

$wpdb->insert( 'wp_pl_my_parts', 
                    array( 
                    'user_ID' => $user_ID, 
                    'PL_part_ID' => $PL_part_ID, 
                    'part_save_date' => $part_save_date ), array( '%d', '%d', '%s' ) );

重複したエントリを挿入しないようにするにはどうすればよいですか。すなわちuser_IDとPL_part_IDが既存のレコードと同じ場合は挿入したくありません。

日付は関係ありませんので、チェックしないでください。

テーブルの主キーがmy_part_IDであるとしましょう。そのため、以下のようにuser_IDPL_part_IDの組み合わせに主キー値があるかどうかを確認します。

$my_part_ID = $wpdb->get_var(
                $wpdb->prepare(
                    "SELECT my_part_ID FROM " . $wpdb->prefix . "pl_my_parts
                    WHERE user_ID = %d AND PL_part_ID = %d LIMIT 1",
                    $user_ID, $PL_part_ID
                )
            );

if ( $my_part_ID > 0 )
    // exists
else
    // does not exist
8
Chittaranjan

重複を防ぐためにUNIQUEインデックスでデータベーステーブルを作成するだけです。手始めに MySQL:CREATE INDEX構文 を参照してください。 WordPressの仕様については、 Codex:プラグインを使ったテーブルの作成 - データベーステーブルの作成 をご覧ください。下記の例のコードはそこから取られます:

global $wpdb;
$sql = "CREATE TABLE $table_name (
  id mediumint(9) NOT NULL AUTO_INCREMENT,
  time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  name tinytext NOT NULL,
  text text NOT NULL,
  url VARCHAR(55) DEFAULT '' NOT NULL,
  UNIQUE KEY id (id)
);";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );

この答えの前提は、OPが事前に経験している問題を防ぐためです。そもそも問題が起こらないように設計し、計画し、設定することを意味します。

4
Nicolai

WPDBでレコードが存在するかどうかを確認する最良の方法は、最初にWPDB更新機能を使用して確認することです。この例は次のとおりです。

    if(!$wpdb->update($wpdb->prefix.'table_name',$data,array('id'=>$dbRowId),array('%s'),array('%d'))){
        $wpdb->insert($wpdb->prefix.'table_name',$data,array('%s'));
        return $wpdb->insert_id;
    }else{
        return $dbRowId;
    }

それは全体的な機能としてあなたが望むかもしれないより少し大きいです、しかしあなたがそれをあなたのプラグインまたはテーマのモデルまたはDBクラスで呼び出し可能なメソッドとして設定するならば、あなたはそれにWPDB機能性を扱わせることができます。

3
Caleuanhopkins
global $wpdb;
$table_user = $wpdb->prefix . 'user';
$PL_part_ID= $_POST['PL_part_ID'];
// first check if data exists with select query
$datum = $wpdb->get_results("SELECT * FROM $table_user WHERE PL_part_ID= '".$PL_part_ID."'");
 if($wpdb->num_rows > 0) {
 echo "result exists";
 }
// if not exist in the database then insert it
else{
$result = $wpdb->insert( 
$table_token, 
array( 
'Firstname' => $_POST["value1"],
'Surname' => $_POST["value2"],
'Month' => $_POST["value3"],
'Day' => $_POST["value4"],
'Email Address' => $_POST["value5"]
)
);
}
0
HeroWeb512