Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Unir Dos consultas en un array para paginarlas

Estas en el tema de Unir Dos consultas en un array para paginarlas en el foro de PHP en Foros del Web. Hola como estan, mi duda es como puedo hacer para unir dos consultas en un array para luego paginarlas, la cuestion es que tengo mis ...
  #1 (permalink)  
Antiguo 01/06/2013, 21:06
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Pregunta Unir Dos consultas en un array para paginarlas

Hola como estan, mi duda es como puedo hacer para unir dos consultas en un array para luego paginarlas, la cuestion es que tengo mis dos consultas de las cuales muestro resultados en pantalla y no las uno con UNION SELECT porque no me permite mostrar los resultados de la manera esperada...
Si me ayudan se los agradeciera muchisimo---
  #2 (permalink)  
Antiguo 02/06/2013, 01:11
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 6 meses
Puntos: 331
Respuesta: Unir Dos consultas en un array para paginarlas

Hola alexperaza, hace semanas que estás con este tema dándole vueltas y evidentemente no encuentras la solución. Si quieres paginar lo correcto es que reescribas la consulta y luego pagines con un algoritmo cualquiera de paginación tal y como se ha descrito en este foro mil veces. Considera reescribir tu código si no das con la solución, saludos.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 02/06/2013, 07:59
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

Cita:
tengo mis dos consultas de las cuales muestro resultados en pantalla y no las uno con UNION SELECT porque no me permite mostrar los resultados de la manera esperada...
Y por qué no empiezas primero mostrando cuáles son las consultas, cómo las muestras ahora y cómo querrías mostrarlas...
Tal vez exista alguna forma de resolverlo sin complicarte, pero sin verlas estamos hablando en abstracto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 02/06/2013, 14:24
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

Bueno les muestro mis consultas a ver si me pueden ayudar con la solucion ya que es lo UNICO que me falta para terminar mi web pero es muy importante

Código PHP:
Ver original
  1. varPrincipal_principal = "0";
  2. if (isset($_GET["cat"])) {
  3.   $varPrincipal_principal = $_GET["cat"];
  4. }
  5. mysql_select_db($database_clasi, $clasi);
  6. $query_principal = sprintf("SELECT * FROM principal INNER JOIN categorias ON principal.id_categoria=categorias.id_categoria  WHERE categorias.id_categoria=%s  AND principal.premium=0 UNION  SELECT * FROM principal INNER JOIN categorias ON principal.id_categoria=categorias.id_categoria  WHERE categorias.IdPadre=%s  AND principal.premium=0 ORDER BY id_principal DESC  ", GetSQLValueString($varPrincipal_principal, "int"),GetSQLValueString($varPrincipal_principal, "int"));
  7. $principal = mysql_query($query_principal, $clasi) or die(mysql_error());
  8. $row_principal = mysql_fetch_assoc($principal);
  9. $totalRows_principal = mysql_num_rows($principal);
  10.  
  11. $VarPremium_ConsulPremium = "0";
  12. if (isset($_GET["cat"])) {
  13.   $VarPremium_ConsulPremium = $_GET["cat"];
  14. }
  15. mysql_select_db($database_clasi, $clasi);
  16. $query_ConsulPremium = sprintf("SELECT * FROM principal INNER JOIN categorias ON (principal.id_categoria=categorias.id_categoria)  WHERE categorias.id_categoria=%s AND premium=1 UNION SELECT * FROM principal INNER JOIN categorias ON (principal.id_categoria=categorias.id_categoria) WHERE categorias.IdPadre=%s AND premium=1 ORDER BY id_principal DESC ", GetSQLValueString($VarPremium_ConsulPremium, "int"),GetSQLValueString($VarPremium_ConsulPremium, "int"));
  17. $ConsulPremium = mysql_query($query_ConsulPremium, $clasi) or die(mysql_error());
  18. $row_ConsulPremium = mysql_fetch_assoc($ConsulPremium);
  19. $totalRows_ConsulPremium = mysql_num_rows($ConsulPremium);

y lo que muestro en pantalla es esto

Código PHP:
Ver original
  1. <?php echo substr($row_ConsulPremium['descrip'], 0, 355);?>
  2. <?php echo substr($row_principal['descrip'], 0, 240);?>
  #5 (permalink)  
Antiguo 02/06/2013, 15:23
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Unir Dos consultas en un array para paginarlas

Creo que no tienes problema para hacer la union, pues traes todos los campos aunque recomendaria solo traer el campo a mostrar.

Aparte si la unica diferencia es el largo a mostrar ya lo puedes realizar en la consulta mysql con LEFT(campo, 255)

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 02/06/2013, 15:43
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

Analizando con cuidado la sintaxis y condiciones de ambas consultas veo que es perfectamente posible hacer una única consulta que devuelva todo. No me queda claro por qué las necesitas por separado.
Personalmente las planearía como una única consulta con UNION (parecido a la actual), cambiando la forma de poner las condiciones, indicando de otra forma los campos del ORDER BY.

¿Por qué las planteas por separado?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 03/06/2013, 09:02
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

porque necesito mostrar por separado los que tienen premium=1 y premium=0 dicho esto no encuentro la manera de hacerlo teniendo una sola consulta ya que cuando muestro el registro lo que hago es llamar esos campos de la BD pero dependiendo de la Consulta por eso es que lo separo pero si me ayudan a encontrar una manera de mostrar cuando sea premium=1 y premium=0 que seria la consulta que llamo principal seria mucho mas facil porque no tendria problema para paginar solo que tambien nose como implementar los ORDER BY al unir la consulta y eso tambien es importante para mi
  #8 (permalink)  
Antiguo 03/06/2013, 10:32
Avatar de 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, 4 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)
  #9 (permalink)  
Antiguo 03/06/2013, 11:50
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

y en este caso como mostrar un campo de la tabla principal donde premium sea 1 y donde sea cero es decir como hago para mostrarlos en pantalla???
  #10 (permalink)  
Antiguo 03/06/2013, 12:07
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

No se entiende bien la pregunta.
Cuando dices:
Cita:
donde premium sea 1 y donde sea cero
No se entiende si estás hablando de diferentes registros de la tabla o del mismo.
¿Puedes aclarar?

Por otro lado, lo que te propongo es obtener una tabla donde estén todos los resultados, y luego usarlos en función de los valores que existan, para lo cual obviamente hay que recorrerla. Pero no termino de entender la lógica de esta tarea.

Exactamente, ¿qué es lo que muestras y qué es lo que quieres mostrar?

Yendo a lo que dices en el primer post, ¿cómo es la manera en que quieres mostrar esta paginación que buscas?
¿Puedes poner un ejemplo visualmente claro?

Lo que hasta ahora has mostrado es sólo el código de las consultas, pero no nos descripto o posteado una sola imagen que nos sirva de guía para saber cuál es el resultado final que se busca.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 03/06/2013, 12:31
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

bueno en mi tabla tengo los campos descripcion y premium pero cuando premium=1 se coloca la descripcion en un div con css diferente que cuando premium=0 lo mas facil que encontre hacer y porque no he encontrado otra manera fue hacer dos consultas diciendo where premium=1 y where premium=0 respectivamente mi problema hasta el momento es paginar cuando tenga 10 descripciones en la suma de los dos premium 0 y 1 nose si me explico mas con esto la verdad estoy muy desesperado despues de trabajar tanto en mi pagina al final llego a esto que no puedo resolver...
  #12 (permalink)  
Antiguo 03/06/2013, 12:36
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

¿Y te das cuenta que la única diferencia que hay entonces, es simplemente derivar el contenido a un div diferente?
SI esa tarea la haces con una tabla o con dos, es decir, con una consulta o con dos, en el fondo es lo mismo. Es lo mismo porque la derivación a uno u otro div, no se hace a causa de la consulta, sino por del valor de un campo... y en ese caso ponerlo en una tabla daría el mismo resultado.
Pero para mejor claridad (ya que escribes demasiado confuso, sin puntos aparte, sin una buena redacción, sería mejor que nos muestre dos cosas:
1) Postea una imagen de lo que el usuario verá finalmente.
2) Postea el código donde se hace la asignación a uno u otro div (esto es lo que ya te hemos pedido y no muestras).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 03/06/2013, 13:46
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

Perdon por los errores ortograficos, no fue mi intencion. Aquí están los div que muestro, y por lo cual he creado dos consultas a mi base de datos.

Código PHP:
Ver original
  1. <div class= "premium" >
  2.       <?php echo substr($row_ConsulPremium['descrip'], 0, 355);?></a></td>
  3.    
  4.     </div>
  5.    
  6.  <div class= "principal" >
  7.       <?php echo substr($row_principal['descrip'], 0, 240);?></a></td>
  8.    
  9.           </div>

  #14 (permalink)  
Antiguo 03/06/2013, 13:49
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

Creo no saber como mostrar las imagenes en el foro si me dicen les subo una para que vean como muestro los div para el usuario
  #15 (permalink)  
Antiguo 03/06/2013, 14:10
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

La debes subir a un repositorio y direccionarlas desde allí. Alguno como ImageShack, TinyPic, o cualquier sitio así.
Luego tomas el link a la imagen y lo usas en la ventana que se abre en el ícono de imagenes (supongo que ya habrás notado que existe...)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 03/06/2013, 14:11
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Unir Dos consultas en un array para paginarlas

Cita:
Iniciado por alexperaza Ver Mensaje
Perdon por los errores ortograficos, no fue mi intencion. Aquí están los div que muestro, y por lo cual he creado dos consultas a mi base de datos.

Código PHP:
Ver original
  1. <div class= "premium" >
  2.       <?php echo substr($row_ConsulPremium['descrip'], 0, 355);?></a></td>
  3.    
  4.     </div>
  5.    
  6.  <div class= "principal" >
  7.       <?php echo substr($row_principal['descrip'], 0, 240);?></a></td>
  8.    
  9.           </div>

Quiero imaginar que és no es todo lo que tienes...
Me refiero a todo el código, desde el momento en que obtienes el resultado de cada consulta, hasta que los vas enviando a los Divs.
Todo el código del formulario y los scripts que generan la iteración de resultados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 03/06/2013, 17:24
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

Esto es lo que yo muestro a los usuarios

En la misma pagina claro esta

y esta es la iteracion que hago tras sacar de la base de datos la descripcion
Código PHP:
Ver original
  1. <?php do { ?>
  2.  <div class= "premium" >
  3.  <?php echo substr($row_ConsulPremium['descrip'], 0, 355);?>
  4.     </div>
  5.   <?php } while ($row_ConsulPremium = mysql_fetch_assoc($ConsulPremium)); ?>
  6.  
  7.   <?php do { ?>
  8.    
  9.   <div class="principal">
  10.   <?php echo substr($row_principal['descrip'], 0, 240);?>
  11.  
  12.    </div>
  13.    
  14.     <?php } while ($row_principal = mysql_fetch_assoc($principal)); ?>

Última edición por alexperaza; 03/06/2013 a las 17:30
  #18 (permalink)  
Antiguo 03/06/2013, 17:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Unir Dos consultas en un array para paginarlas

¿y porque no haces un simple if?
Código PHP:
Ver original
  1. <?php
  2. do {
  3.       if ($row['premium'] == 1) {
  4.               $class = "premium";
  5.               $length = 355;
  6.       } else {
  7.               $class = "principal";
  8.               $length = 240;
  9.       }
  10.  
  11.      ?>
  12.      <div class="<?=$class;?>">
  13.            <?php echo substr($row['descrip'], 0, $length); ?>
  14.      </div>
  15.      <?php
  16. } while ($row = mysql_fetch_assoc($result);

Saludos.
  #19 (permalink)  
Antiguo 04/06/2013, 07:15
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Pregunta Respuesta: Unir Dos consultas en un array para paginarlas

Cita:
Iniciado por GatorV Ver Mensaje
¿y porque no haces un simple if?
Código PHP:
Ver original
  1. <?php
  2. do {
  3.       if ($row['premium'] == 1) {
  4.               $class = "premium";
  5.               $length = 355;
  6.       } else {
  7.               $class = "principal";
  8.               $length = 240;
  9.       }
  10.  
  11.      ?>
  12.      <div class="<?=$class;?>">
  13.            <?php echo substr($row['descrip'], 0, $length); ?>
  14.      </div>
  15.      <?php
  16. } while ($row = mysql_fetch_assoc($result);

Saludos.
GatorV, Muchas gracias porque me funciona esto solo si hay manera de que todos los que esten en premium vayan por encima de los que esten en principal, sabes si se puede?
  #20 (permalink)  
Antiguo 04/06/2013, 07:29
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Unir Dos consultas en un array para paginarlas

Creo que me han dado la solucion a mi conflicto, ya que con un poco de css creo que logro lo que quiero, Muchas gracias por su ayuda y regaños a todos saludos y perdón por las novatadas..

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:24.