¿$wpdb->delete valores de columna con IN ARRAY()?

22 may 2016, 10:04:44
Vistas: 21.9K
Votos: 5

Me pregunto si esto es posible:

$wpdb->delete(
    'table_name',
    array('id' => array(1, 2, 3)),
    array('%d')
);

Entonces, en esta situación, debería eliminar 3 filas a la vez y llamar a la base de datos solo 1 vez. Tengo muchas eliminaciones que podrían ser posibles con mi script y preferiría que solo realizara la eliminación una vez, en lugar de tener que recorrer todos los IDs y hacer un $wpdb->delete en cada uno individualmente. ¿Es esto posible? Parece que debería serlo...

3
Comentarios

¿Lo has probado? O mejor aún, ¿lo has buscado?

Tim Malone Tim Malone
22 may 2016 12:37:53

Sí, he mirado la función y no parecía posible. Pero honestamente, esto debería ser posible de hacer, ya que no hay mucha diferencia y tendría sentido que estuviera en esta función.

Solomon Closson Solomon Closson
22 may 2016 20:34:57

No entiendo por qué el voto negativo aquí... quizás quien lo hizo pueda ayudarme a entender ¿por qué? ¿Por qué la ignorancia de preguntar si lo busqué? Por supuesto que lo hice, y pensé en preguntar de todos modos. ¿No es para eso este sitio?

Solomon Closson Solomon Closson
22 may 2016 20:44:53
Todas las respuestas a la pregunta 1
6
12

No, wpdb::delete no maneja nada más que WHERE campo = X. Simplemente puedes usar el método query en su lugar:

$ids = implode( ',', array_map( 'absint', $ids ) );
$wpdb->query( "DELETE FROM nombre_tabla WHERE ID IN($ids)" );
22 may 2016 13:05:23
Comentarios

Gracias, estoy al tanto de las alternativas. No veo la relevancia de usar absint ya que solo sería relevante para columnas UNSIGNED, y podría no ser el caso. Pero gracias por tu ejemplo de método alternativo de todos modos.

Solomon Closson Solomon Closson
22 may 2016 20:43:32

Solo demostrando un nivel de saneamiento; dudo que tus IDs estén codificados directamente.

TheDeadMedic TheDeadMedic
22 may 2016 20:45:23

Sí, los ids no están codificados directamente, están dentro de un array, así que este es un buen ejemplo, solo que no usando absint supongo. Gracias de todas formas.

Solomon Closson Solomon Closson
22 may 2016 21:02:32

Está bien, entonces solo usa intval en su lugar

TheDeadMedic TheDeadMedic
22 may 2016 21:02:57

Cierto, supongo que deberían agregar esta funcionalidad en WordPress, parece lo suficientemente simple como para añadirla. Pero hasta entonces, esta respuesta está bien.

Solomon Closson Solomon Closson
22 may 2016 21:03:36

Si deseas esta funcionalidad, envía un ticket en trac - esa es la belleza del código abierto, está construido por todos nosotros.

TheDeadMedic TheDeadMedic
22 may 2016 21:04:41
Mostrar los 1 comentarios restantes