$ wpdb Codexページから this code を取り出し、既存のInsertクエリを変更しました。
$table = $wpdb->prefix . 'user_req';
$post_id = explode('_', $_POST['post_id']);
$user_id = $_POST['user_id'];
$wpdb->insert(
$table,
array(
'user_id' => $user_id,
'post_id' => $post_id[1]
),
array(
'%d',
'%d'
)
);
に:
$wpdb->query( $wpdb->prepare(
"
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
ON DUPLICATE KEY UPDATE
user_id = VALUES(user_id), post_id = VALUES(post_id)
",
$user_id,
$post_id[1]
) );
私はデータベースへの重複エントリを防ぐ必要があるからです。しかし、挿入クエリが正しく機能している間は、重複エントリがデータベースに入力されています。 ON DUPLICATE KEY UPDATE
部分を追加するために、私は別のスレッドで s_ha_dumのAnswer に従いました。
何がおかしいのですか?
それは私のせいです。 @ Ottoのコメントの後に解決策を得た:
あなたは実際にここに重複したキーを持っていますか? user_reqの構造やキーとインデックスは何ですか?
これが私のSQLクエリがどうあるべきかです:
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
WHERE NOT EXISTS (
SELECT * FROM
{$wpdb->prefix}user_req.user_id = user_id
AND
{$wpdb->prefix}user_req.post_id = post_id
)
今すぐ修正しました。 Ottoに感謝します。
私が言ったけれども、それは解決された、しかし実際には、それはそうではない。どういうわけかコードがうまくいっておらず、データを挿入することすらできませんでした( 詳細はこちら )。それで、私が他の人から得た知識と、そして私の同僚のアリフル・ハケ氏の助けを借りて、私はそれを2つの異なるけれども連動した質問でしました:
$alreadyGot = $wpdb->get_results(
"SELECT
COUNT(*) AS TOTALCOUNT
FROM {$table}
WHERE ( user_id = $user_id AND post_id = $post_id[1] )
AND ( order_id = '' )"
);
$count = $alreadyGot[0]->TOTALCOUNT; //if there's any duplicate, it'd return 1
// if the count return 1, do nothing, but else insert the data
if( $count > 0 ) {
//do nothing
} else {
$wpdb->insert(
$table,
array(
'user_id' => $user_id,
'post_id' => $post_id[1]
)
);
}