2 de abril de 2008

MySql: Cómo hacer consultas con subconsultas incluídas

Uno de los principales objetivos que me marco como programador web es intentar aligerar la carga de trabajo del servidor y acelerar la respuesta del mismo.

Para ello siempre intento reducir al máximo el número de conexiones que hago con el servidor de base de datos gracias a condensar en el mínimo número posible de sentencias de mySql todas las consultas de base de datos que debo hacer.

Una de las herramientas para conseguir un buen conjunto de datos con una instrucción mySql es la subconsulta.

Si sois nuevos con el uso de sql el uso de subconsultas os puede agobiar un poco, pero no os preocupéis, es algo muy sencillo.

Os voy a mostrar ahora un ejemplo en el que disponemos de dos tablas: categories y products.

Cada fila de la tabla products tiene un campo llamado category_id en el que enlazamos cada fila de datos de product con una fila de la tabla categories.

Pues bueno, os pongo aquí el ejemplo:


$DB->mQ = "SELECT * FROM categories c WHERE active='1' AND (select count(id) from products p where p.category_id=c.id)>0";

$categories = $DB->Execute($_SERVER['PHP_SELF'], __LINE__);



Con esta sentencia obtendremos un listado de categorías que tengan como mínimo un producto. Cómo podéis ver la sentencia sql a la izquierda de WHERE es la típica sentencia mySql. A la derecha del WHERE tenemos las dos condiciones de la sentencia, la también típica active='1' y la subconsulta (select count(id) from products p where p.category_id=c.id)>0.

Bueno, pues espero que este ejemplo os sirva :)

No hay comentarios: