Foros del Web » Programando para Internet » PHP »

Unir 2 Queries en fetch_array

Estas en el tema de Unir 2 Queries en fetch_array en el foro de PHP en Foros del Web. Tengo el problema de que tengo 3 tablas las cuales quiero tabular ordenadas por fecha de registro (de la mas reciente a la mas antigua) ...
  #1 (permalink)  
Antiguo 03/10/2014, 18:19
 
Fecha de Ingreso: mayo-2013
Ubicación: Guadalajara
Mensajes: 53
Antigüedad: 10 años, 11 meses
Puntos: 0
Unir 2 Queries en fetch_array

Tengo el problema de que tengo 3 tablas las cuales quiero tabular ordenadas por fecha de registro (de la mas reciente a la mas antigua) las uno en una misma consulta con UNION ALL y las ordeno por REGISTRO y a la hora de imprimir con un while lo hace bien y en orden, pero es IMPORTANTE que para cada tabla tenga una salida en formato diferente ya que una tabla es imagenes y la otra links.

Código PHP:
Ver original
  1. $sql = "SELECT * FROM links UNION ALL SELECT * FROM textos ORDER BY REGISTRO DESC LIMIT 10 ";
  2. $query = mysqli_query($con,$sql);
  3.                        
  4. while($row = mysqli_fetch_array($query))
  5. {
  6. }

Pero en el while me imprime el texto con el html de links lo cual se ve mal por que no siempre nos entrega link, puede venir una imagen o texto.



Mi pregunta es si hay manera de con un if dentro del while saber de que tabla proviene el row y en base a de donde viene ahora si imprimirlo en el html correcto que le corresponde (ya sea link,texto o imagen).

Saludos. Gracias.

Última edición por gnzsoloyo; 03/10/2014 a las 19:53
  #2 (permalink)  
Antiguo 03/10/2014, 19:55
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 2 Queries en fetch_array

mysqli_fetch_array() no es tema de MySQL

OFF TOPIC en MySQL.

Movido a PHP.

Cita:
Mi pregunta es si hay manera de con un if dentro del while saber de que tabla proviene el row
No hay modo de saberlo con un while, porque el while solo recorrerá el resultado de la consulta. DE hecho en un UNION no hay modo que ni siquiera la base te diga de qué tabla toma qué registro. No lo hace.
Normalmente lo que se puede hacer es forzar la creación de una columna ficticia que luego te sirva para procesar el dato en PHP.
Algo como:
Código SQL:
Ver original
  1. SELECT 'link' Origen, L.*
  2. FROM links L
  3. UNION ALL
  4. SELECT 'texto' Origen, T.*
  5. FROM textos T
  6. ORDER BY REGISTRO DESC
  7. LIMIT 10
Eso devolverá una primera columna con el nombre "Origen", que contendrá uno de dos valores ("link" o "texto"). Lo podrás usar para lo que quieras.
Es un parche. No es una buena solución.
Tengamos en cuenta que si los links están relacionados con los textos, lo que corresponde usar en todo caso es JOIN y no UNION.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 03/10/2014 a las 20:23
  #3 (permalink)  
Antiguo 03/10/2014, 20:29
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Unir 2 Queries en fetch_array

Pues, a menos de que los nombres de los campos de ambas tablas sean idénticos, creo que sería fácil de distinguir a unos de otros precisamente por el nombre. Si en la primera tabla tienes imágenes, imagino que el nombre del campo de dichos datos debe de ser distinto a los campos de la segunda tabla, entonces, al momento de imprimir, coloca el dato de las imágenes en un elemento <img> y lo mismo va para los enlaces que mencionas y demás datos.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: mysql, union
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 12:37.