Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/06/2013, 10:32
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

Bueno, un primer acercamiento podría ser:
Código MySQL:
Ver original
  1.     *
  2.     `principal` `P`
  3.         INNER JOIN
  4.     `categorias` `C` ON `P`.`id_categoria` = `C`.`id_categoria`
  5.     `C`.`id_categoria` IN (1,2, 3, 4) AND `P`.`premium` IN (0,1)
  6.     *
  7.     `principal`
  8.         INNER JOIN
  9.     `categorias` ON `principal`.`id_categoria` = `categorias`.`id_categoria`
  10.     `categorias`.`IdPadre` IN (1,2, 3, 4) AND `P`.`premium` IN (0,1)
  11. ORDER BY `C`.`id_categoria` ASC, `P`.`premium` ASC, C.`id_principal` DESC;

Donde la implementación tal vez podría ser:
Código PHP:
Ver original
  1. // Caso de ejemplo
  2.     $categorias = '1, 2, 3, 4, 5, 6';
  3.    
  4.     $qry =
  5.             "SELECT
  6.                *
  7.            FROM
  8.                `principal` `P`
  9.                    INNER JOIN
  10.                `categorias` `C` ON `P`.`id_categoria` = `C`.`id_categoria`
  11.            WHERE
  12.                `C`.`id_categoria` IN ($categorias) AND `P`.`premium` IN (0,1)
  13.            UNION
  14.            SELECT
  15.                *
  16.            FROM
  17.                `principal`
  18.                    INNER JOIN
  19.                `categorias` ON `principal`.`id_categoria` = `categorias`.`id_categoria`
  20.            WHERE
  21.                `categorias`.`IdPadre` IN ($categorias) AND `P`.`premium` IN (0,1)
  22.            ORDER BY `C`.`id_categoria` ASC, `P`.`premium` ASC, C.`id_principal` DESC;";
En esencia, las categorias a consultar deben quedar incrustadas en la query como un cojunto de valores separados por comas.
Esta consulta así como está no es totalmente correcta porque estás haciendo una de las peores formas de consultar, que es usar el asterisco ("SELECT *", sería conveniente que usarlas los campos específicos uno a uno, a fin de poder hacer dos cosas: 1) Evitar traer campos duplicados o innecesarios, y 2) De ese modo se puede hacer crear un ORDER BY correcto, con los campos por posición, de modo de poder establecer un buen formato de salida, y evitar problemas de nombres de columnas, que son probables en esta forma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)