Cum să folosești interogări de actualizare și ștergere în WordPress

5 mai 2015, 09:40:21
Vizualizări: 65.9K
Voturi: 4

Mai întâi am scris manual interogări de actualizare, ștergere, inserare și selectare și am executat datele cu funcția mysql_query

Astfel:

Interogare Select

$prefix = $wpdb->prefix;
$postSql = "SELECT DISTINCT post_id
            FROM " . $prefix . "postmeta As meta
            Inner Join " . $prefix . "posts As post
            On post.ID = meta.post_id
            Where post_type = 'product' 
            And post_status = 'publish'
            And meta_key Like '%product_img%'";
$postQry = mysql_query($postSql);
while ($postRow = mysql_fetch_array($postQry)) {
     $post_id = $postRow['post_id'];
}

Interogare Insert

$insert_images = "Insert Into " . $prefix . "postmeta(post_id,meta_key,meta_value) Value('$post_id','$meta_key','$data_serialize')";
        mysql_query($insert_images);

Interogare Update:

$update_price = "Update " . $prefix . "postmeta
                         Set meta_key = 'wpc_product_price'
                         Where post_id = $supportMetaID
                         And meta_key Like '%product_price%'";
 mysql_query($update_price);

Interogare Delete

mysql_query("Delete From " . $prefix . "postmeta Where meta_key IN ('product_img1','product_img2','product_img3')");

Toate interogările funcționează perfect... dar acum vreau să încorporez toate interogările în interogări WordPress.

Pot folosi și interogări WordPress precum

$wpdb->get_results( "SELECT id, name FROM mytable" );
$wpdb->insert( 
    'table', 
    array( 
        'column1' => 'value1', 
        'column2' => 123 
    ), 
);
$wpdb->update( 
    'table', 
    array( 
        'column1' => 'value1',  // șir de caractere
        'column2' => 'value2'   // întreg (număr) 
    ), 
    array( 'ID' => 1 )
);
$wpdb->delete( 'table', array( 'ID' => 1 ) );

Dar după cum puteți vedea, folosesc condiții and / or în interogările mele. Așa că aș avea nevoie de ajutor pentru a vedea cum pot încorpora interogările mele în WordPress

1
Comentarii

WordPress oferă clasa $wpdb pentru a face toate acestea. Dar o interogare ca prima poate fi ușor realizată cu WP_Query() cu mai puțin efort.

Mayeenul Islam Mayeenul Islam
5 mai 2015 11:18:49
Toate răspunsurile la întrebare 2
0

Despre UPDATE+INSERT:

Am creat o funcție pentru mine, care ar putea fi utilă și pentru tine, de exemplu:

UPDATE_OR_INSERT('wp_users',  array('gender'=>'female'), array('name'=>'Monika') );

aceasta va ACTUALIZA o valoare în coloană (unde name=monika), dar în cazul în care valoarea nu există, atunci va crea o nouă înregistrare în baza de date.
De ce este necesar acest lucru? Din câte știu, nu există o funcție sofisticată în WP care să actualizeze datele în baza de date (dacă valoarea există) sau să insereze date (dacă nu există). În schimb, folosim: $wpdb->update() sau $wpdb->insert(). Așadar, folosește această funcție, este utilă:

function UPDATE_OR_INSERT($tablename, $NewArray, $WhereArray){          global $wpdb; $arrayNames= array_keys($WhereArray);
    //convertim array-ul în STRING
    $o=''; $i=1; foreach ($WhereArray as $key=>$value){ $o .= $key . ' = \''. $value .'\''; if ($i != count($WhereArray)) { $o .=' AND '; $i++;}  }
    //verificăm dacă există deja
    $CheckIfExists = $wpdb->get_var("SELECT ".$arrayNames[0]." FROM ".$tablename." WHERE ".$o);
    if (!empty($CheckIfExists))  { return $wpdb->update($tablename, $NewArray,  $WhereArray );}
    else                         { return $wpdb->insert($tablename,     array_merge($NewArray, $WhereArray) );  } 
}
1 sept. 2016 14:52:01
0

Actualizare Interogare:

$table = $wpdb->prefix . 'tablename';

$wpdb->update( $table_name, array( 'role_id' => 1),array('user_id'=>$user_id));

Ștergere Interogare:

$wpdb->delete( $table, array( 'id' => $id ) );
4 mai 2020 13:20:46