在$wpdb->查询中使用MySQL变量对列重新编制索引?

时间:2019-09-19 作者:gordie

我有一个MySQL查询do 在PHPMyAdmin工作:

set @ROW = 0;UPDATE `wp_wpsstm_subtracks` SET `subtrack_order` = @ROW := @ROW+1 WHERE tracklist_id=\'176226\' ORDER BY `subtrack_time` ASC
我想在Wordpress中使用它:

    $querystr = $wpdb->prepare("set @ROW = 0;UPDATE `$subtracks_table` SET `subtrack_order` = @ROW := @ROW+1 WHERE tracklist_id=\'%d\' ORDER BY `subtrack_time` ASC", $this->post_id );
    return $wpdb->query($querystr);
但它引发了一个语法错误:

WordPress数据库错误Erreur de syntax près de’UPDATEwp_wpsstm_subtracks 设置subtrack_order = @行:=@行+1,其中trackli\'a la ligne 1用于查询集@行=0;更新wp_wpsstm_subtracks 设置subtrack_order = @行:=@行+1,其中tracklist\\u id=\'176226\'排序依据subtrack_time ASC公司

我怎样才能做到这一点?

谢谢

2 个回复
SO网友:gordie

如果我理解正确,这是不可能的(两个查询而不是一个查询)。我最终陷入了一个悲伤而耗时的循环…:/

    //get subtracks
    $querystr = $wpdb->prepare("SELECT subtrack_id FROM `$subtracks_table` WHERE tracklist_id=\'%d\' ORDER BY `subtrack_time` ASC",$this->post_id);
    if ( !$ids = $wpdb->get_col($querystr) ) return;

    //update order
    $i = 0;
    foreach($ids as $id){

        $i++;

        $wpdb->update( 
            $subtracks_table, //table
            array(\'subtrack_order\'=>$i), //data
            array(\'subtrack_id\'=>$id) //where
        );
    }

SO网友:Botić Denis

我刚刚创建了这个,它就像一个魔咒:

$wpdb->query(
    "UPDATE " . $table . " SET your_column_name = (
        SELECT (@rownum := @rownum + 1) FROM (SELECT @rownum := 0) r
    ) 
    WHERE some_column = " . $id . " AND some_other_column = " . $some_value
);
如果不需要,您可以删除其他术语。