miércoles, 8 de abril de 2020

MySQL búsqueda en múltiples campos (CONCAT y CONCAT_WS)

A veces, por ocio :) o por optimización del código, uno quieres hacer un WHERE lo más corto posible.

Por ejemplo, quieres buscar una misma palabra en 3 o más campos de tu tabla.

Normalmente harías algo así:

$tabla = "compras";
$where = "WHERE (numeroUnico LIKE '%".$buscada."%' or NumeroComprobante LIKE '%".$buscada."%' or Denominacion_razonSocial LIKE '%".$buscada."%' or comentario LIKE '%".$buscada."%' or FechaEmision LIKE '%".$buscada."%') AND RUC_empresa = '$RUC_empresa'";
$ordenado = "ORDER BY FechaEmision DESC, ID_compras DESC";

$sentencia_SQL = "SELECT * FROM $tabla $where $ordenado";

Bueno existe una forma corta de hacer el WHERE, usando el comando CONCAT, que sirve para concatenar.
Es ese caso tu código quedaría así:

$where = "WHERE CONCAT(numeroUnico, NumeroComprobante, Denominacion_razonSocial, comentario)  FechaEmision LIKE '%".$buscada."%' ";

Sólo una observación. Me ha funcionado muchas veces, pero en una ocasión no me arrojaba los resultados esperados... Luego de investigar un poco encontré CONCAT_WS. El código me quedó así y funcionó :)

$where = "WHERE CONCAT_WS(numeroUnico, NumeroComprobante, Denominacion_razonSocial, comentario)  FechaEmision LIKE '%".$buscada."%' ";

Espero que este datito les sea de utilidad.


chaveztoro

No hay comentarios:

Publicar un comentario