【问题标题】:MySQL SELECT, OUTPUT THEN DELETEMySQL 选择,输出然后删除
【发布时间】:2016-04-15 05:30:50
【问题描述】:

我在 WP 安装中使用此查询从自定义表中输出最低的 a 代码。它成功输出了 ID 最低的行,并且取值为“0”。所以,这一切都很好 - 但是,在同一个函数中,我希望输出的代码将其设置为 1,而不是 0。我尝试了很多变化,但不能完全破解它。有任何想法吗?谢谢。

function voucher_func() {
    global $wpdb;
    $vouchers = $wpdb->get_results("SELECT MIN(code) AS code FROM vouchers WHERE taken=0");
    foreach($vouchers as $voucher){
        return $voucher->code;
    }
}
add_shortcode( 'latest_voucher', 'voucher_func' );

从最初的建议开始,我已经走到了这一步。这仍然会输出正确的数据,但不会将 'taken' 更新为 1

function voucher_func() {
global $wpdb;
$vouchers = $wpdb->get_results("SELECT MIN(code) AS code FROM vouchers WHERE taken=0");
foreach($vouchers as $voucher){
return $voucher->code;
}
}
$wpdb->update('vouchers', array('taken' => 1), array('code' => $voucher->code));

add_shortcode( 'latest_voucher', 'voucher_func' );

这就是我现在所拥有的......

function voucher_func() {
global $wpdb;
$vouchers = $wpdb->get_results("SELECT MIN(code) AS code FROM vouchers WHERE taken=0");
foreach($vouchers as $voucher){
$wpdb->update('vouchers', array('taken' => 1), array('code' => $voucher->code));
return $voucher->code;
}
}

add_shortcode( 'latest_voucher', 'voucher_func' );

这是我最终的工作代码:

function voucher_func() {
global $wpdb;
$vouchers = $wpdb->get_results("SELECT MIN(code) AS code FROM vouchers WHERE taken=0");
foreach($vouchers as $voucher){
return $voucher->code;
}
}

add_shortcode( 'latest_voucher', 'voucher_func' );

function action_wpcf7_mail_sent( $contact_form ) {
global $wpdb;
$vouchers1 = $wpdb->get_results("SELECT MIN(code) AS code FROM vouchers WHERE taken=0");
foreach($vouchers1 as $voucher1){
$wpdb->update('vouchers', array('taken' => 1), array('code' => $voucher1->code));
}
};

add_action( 'wpcf7_mail_sent', 'action_wpcf7_mail_sent', 10, 1 );

【问题讨论】:

  • 您尝试过哪些不起作用?
  • 从凭证中删除 ( .... SELECT ... ) 和其他变体 :-(
  • 这是最后的手段。如果可能的话,我宁愿保留记录并使用 SET take=1,但我也无法让它工作。
  • 那么UPDATE vouchers ....

标签: php mysql wordpress select


【解决方案1】:

你会想要使用wpdb->update():

$wpdb->update('vouchers', array('taken' => 1), array('code' => $RetrievedVoucherCode));

【讨论】:

  • 感谢您的建议,但请参阅上面的更新代码。非常感谢您的帮助!
  • @dmt 您需要调用 $wpdb->update 它可以访问凭证代码的地方。在返回之前的 foreach 循环内部将是一个完美的地方。
  • 嗨,jbafford,在返回之前移动新行确实会将所取值从 0 更新到 1,但它会全部更新,而不是最低的值(之前在我的返回中被捕获) )。有什么线索吗?
  • 代码是否唯一?因为那真的应该只更新code == $voucher->code的代码。
  • 每个代码都是唯一的。我刚刚检查过,如果我手动设置(直接更新数据库)只是第一个设置为 1,其余设置为 0,然后提交我的表单,它将以下三个代码从 0 更改为 1,因此它更新三个而不是仅仅那个单一的代码。奇怪。
【解决方案2】:

如果代码是唯一的 UPDATE vouchers SET taken=1 WHERE code = (SELECT MIN(code) FROM vouchers WHERE taken=0)

【讨论】:

    【解决方案3】:

    您可以尝试组合 UPDATE 和 SELECT 语句,类似于 explained here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2013-09-17
      相关资源
      最近更新 更多