Seguramente los usuarios más experimentados ya están al tanto de que, a partir de MySQL 4.1, se puede usar una sentencia ON DUPLICATE KEY UPDATE, que permite actualizar los campos que se especifiquen si es que falla la inserción al no cumplirse las restricciones PRIMARY KEY
o UNIQUE
.
Por ejemplo, el siguiente código:
php:
function recommend( $post ) {
global $wpdb;
if( array_search( $post, $_SESSION['recpost'] ) == NULL && is_numeric( $post ) ) {
$r = mysql_query( 'SELECT * FROM '.$wpdb->prefix.'recit WHERE id_post = '.$post );
if( mysql_num_rows( $r ) == 0 ) {
$q = 'INSERT INTO '.$wpdb->prefix.'recit SET rec = rec+1, id_post = '.$post;
}
else {
$q = 'UPDATE '.$wpdb->prefix.'recit SET rec = rec+1 WHERE id_post = '.$post;
}
$wpdb->query( $q );
$_SESSION['recpost'][] = $post;
}
}
global $wpdb;
if( array_search( $post, $_SESSION['recpost'] ) == NULL && is_numeric( $post ) ) {
$r = mysql_query( 'SELECT * FROM '.$wpdb->prefix.'recit WHERE id_post = '.$post );
if( mysql_num_rows( $r ) == 0 ) {
$q = 'INSERT INTO '.$wpdb->prefix.'recit SET rec = rec+1, id_post = '.$post;
}
else {
$q = 'UPDATE '.$wpdb->prefix.'recit SET rec = rec+1 WHERE id_post = '.$post;
}
$wpdb->query( $q );
$_SESSION['recpost'][] = $post;
}
}
Se puede resumir en:
php:
function recommend( $post ) {
global $wpdb;
if( array_search( $post, $_SESSION['recpost'] ) == NULL && is_numeric( $post ) ) {
$q = "INSERT INTO {$wpdb->prefix}recit (rec, id_post) VALUES (0, '$post')
ON DUPLICATE KEY UPDATE rec = rec + 1";
$wpdb->query( $q );
$_SESSION['recpost'][] = $post;
}
}
global $wpdb;
if( array_search( $post, $_SESSION['recpost'] ) == NULL && is_numeric( $post ) ) {
$q = "INSERT INTO {$wpdb->prefix}recit (rec, id_post) VALUES (0, '$post')
ON DUPLICATE KEY UPDATE rec = rec + 1";
$wpdb->query( $q );
$_SESSION['recpost'][] = $post;
}
}
En fin, espero que sea de utilidad para alguien 😉