Foros del Web » Programando para Internet » PHP »

Como mostrar resultados de varias tablas mysql con php

Estas en el tema de Como mostrar resultados de varias tablas mysql con php en el foro de PHP en Foros del Web. Les expongo mi problema: Tengo 6 tablas con campos distintos, en todas existe el campo idusuario. Lo que necesito es hace un buscador con un ...
  #1 (permalink)  
Antiguo 29/09/2010, 15:55
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Como mostrar resultados de varias tablas mysql con php

Les expongo mi problema: Tengo 6 tablas con campos distintos, en todas existe el campo idusuario. Lo que necesito es hace un buscador con un input, y lo que se ponga en ese input me muestre lo que encuentra en los campos titulo,info y detalle. La cosa es que me muestre los resultados que contengan esa palabra dentro de las 6 tablas.

si fuera una tabla sería mysql_query("SELECT titulo,info,detalle FROM tabla1 WHERE titulo LIKE '%$palabra%' OR info LIKE '%$palabra%' OR detalle LIKE '%$palabra%'");

eso me funciona sin problema, pero como lo hago para 6 tablas distintas?

Muchas gracias de ante mano.
  #2 (permalink)  
Antiguo 29/09/2010, 16:06
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Como mostrar resultados de varias tablas mysql con php

No entiendo, los campos titulo, info y detalle están en una tabla llamada por ejemplo tabla1, sólo quieres que se muestren los resultados de esos campos, pero también dices que las otras tablas tienen campos diferentes, entoces cómo esperas obtener sus datos si sólo especificas 3 campos de una sola tabla?, plantea mejor tu pregunta que pides una cosa y luego otra.

Saludos.
  #3 (permalink)  
Antiguo 29/09/2010, 16:14
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Sorry si me expliqué mal, lo que necesito es mostrar resultados desde 6 tablas en donde algunos campos son iguales y otros son distintos.
  #4 (permalink)  
Antiguo 29/09/2010, 16:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 9
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Tendrías que hacer inner joins, pero si no los haces bien y no tienes índices te va a quedar muuuuuuuuuy lento tu script. Sería algo así:

Código MySQL:
Ver original
  1.     tbl1.id_tbl1,
  2.     tbl2.id_tbl2,
  3.     tbl3.id_tbl3
  4.     tbl1
  5.     tbl2
  6.         ON
  7.         tbl2.id_tbl1 = tbl1.id_tbl1
  8.     tbl3
  9.         ON
  10.         tbl3.id_tbl1 = tbl1.id_tbl1
  11.     tbl1.titulo LIKE '%palabra%' OR tbl1.info LIKE '%palabra%' OR tbl1.detalle LIKE '%palabra%' OR
  12.     tbl2.titulo LIKE '%palabra%' OR tbl3.info LIKE '%palabra%' OR tbl2.detalle LIKE '%palabra%'

Espero que sea claro el ejemplo
  #5 (permalink)  
Antiguo 29/09/2010, 16:34
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Como mostrar resultados de varias tablas mysql con php

Lo más básico sería realizar algo como esto

Código PHP:
$sql mysql_query("SELECT a.idusuario,a.titulo,a.info,a.detalle,b.idusuario,b.titulo,b.info,b.detalle FROM a tabla1, b tabla2 WHERE a.titulo LIKE '%".$palabra."%' OR a.info LIKE '%".$palabra."%' OR a.detalle LIKE '%".$palabra."%' OR b.titulo LIKE '%".$palabra."%' OR b.info LIKE '%".$palabra."%' OR b.detalle LIKE '%".$palabra."%' AND a.idusuario=b.idusuario"); 
En ese ejemplo estoy buscando en dos tablas relacionadas por el campo idusuario (a.idusuario=b.idusuario)

Otra forma es usando INNER JOIN, googlea un poco y encontrarás lo que necesitas.

Saludos.
  #6 (permalink)  
Antiguo 30/09/2010, 09:52
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Gracias por su ayuda, detallaré más el problema:

Utilizo esto:
Código PHP:
Ver original
  1.     SELECT dias.titulo as diastitulo, articulos.titulo as articulostitulo FROM dias, articulos WHERE dias.titulo LIKE '%$palabra%' OR articulos.titulo LIKE '%$palabra%'
  2.     ");
  3. while($row=mysql_fetch_array($buu))
  4. {
  5.     echo $row['diastitulo'].' / '.$row['articulostitulo'].'<br>';
  6. }

Se que es super básico lo que puse arriba. Lo que quiero lograr es que cuando busquen por ejemplo "camion" y en la base de datos dias exista algo con titulo "camion" muestre ese dias, y si hay otro en la base de datos de articulos que también lo muestre abajo, no se si se entiende.
  #7 (permalink)  
Antiguo 01/10/2010, 07:44
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Como mostrar resultados de varias tablas mysql con php

Saludos

Pienso que deberias manejarlo de la siguiente manera

Código PHP:
SELECT dias.titulo as diastituloarticulos.titulo as articulostitulo
FROM dias
LEFT OUTER JOIN articulos 
ON dias
.titulo articulos.titulo
AND (dias.titulo LIKE '%$palabra%' OR articulos.titulo LIKE '%$palabra%'
Cualquier novedad lo comentas.

Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #8 (permalink)  
Antiguo 01/10/2010, 07:52
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Nano_, muchas gracias por tu ayuda. Intenté pero no me arroja resultados. Además puede que dias.titulo y articulos.titulo no sean iguales, pero si que contengan la misma palabra.
  #9 (permalink)  
Antiguo 01/10/2010, 07:53
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Como mostrar resultados de varias tablas mysql con php

Saludos

Podrias colocar la estructura de las dos tablas?

Hasta Pronto
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #10 (permalink)  
Antiguo 01/10/2010, 07:59
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Gracias nuevamente Nano_, aquí va la estructura:

Tabla Articulos:

id int(20)
categoria int(20)
subcategoria int(20)
titulo varchar(255)
detalle text
precio varchar(255)
link text
idusuario int(20)
fecha varchar(15)
visitas int(100)

Tabla Dias:
id int(20)
idusuario int(20)
titulo varchar(255)
info text
categoria varchar(255)
dia varchar(255)
fecha varchar(10)
visitas int(20)
imgid int(20)
izq int(1)
der int(1)
img text


---------

Lo que intento hacer es que busquen por un input y esa palabra que ingresaron en el input la busque en dias.titulo, dias.info, articulos.titulo, articulos.detalle. Si encuentra esa palabra en alguna de las 2 tablas muestre el resultado.
  #11 (permalink)  
Antiguo 01/10/2010, 08:16
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Mensaje Respuesta: Como mostrar resultados de varias tablas mysql con php

Saludos


Intenta de esta manera:

Código PHP:
SELECT dias.titulo as diastitulo
FROM dias
WHERE 
(dias.titulo LIKE '%$palabra%'  OR   dias.info  LIKE '%$palabra%')
UNION ALL
SELECT articulos
.titulo as articulostitulo
FROM articulos
WHERE 
(articulos.titulo LIKE '%$palabra%'  OR articulos.detalle LIKE '%$palabra%'
Cualquier novedad lo comentas.

Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #12 (permalink)  
Antiguo 01/10/2010, 08:22
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Gracias nuevamente Nano_, ¿cómo debiese mostrar los resultados?:

Código PHP:
Ver original
  1. if(empty($row['diastitulo'])) { echo $row['diastitulo'].'<br>'; } else { echo $row['articulostitulo'].'<br>'; }

La idea es que me muestre uno por línea.
  #13 (permalink)  
Antiguo 01/10/2010, 08:28
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Como mostrar resultados de varias tablas mysql con php

Saludos

Código PHP:

$diastitulo 
=$row['diastitulo'];
$articulostitulo=$row['articulostitulo'];

      if(empty(
$diastitulo ) OR $diastitulo !="" ) { 
           echo 
$diastitulo .'<br>'
     } else if (empty(
$articulostitulo) OR $articulostitulo!="" ){ 
        echo 
$articulostitulo.'<br>'
     } 
Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #14 (permalink)  
Antiguo 01/10/2010, 08:33
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

¡Muchas Gracias Nano_! ya ha funcionado, te agradezco montones tu tiempo y ayuda.
  #15 (permalink)  
Antiguo 01/10/2010, 08:35
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
De acuerdo Respuesta: Como mostrar resultados de varias tablas mysql con php

Con mucho Gusto!

Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #16 (permalink)  
Antiguo 01/10/2010, 09:03
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Disculpen molestar nuevamente, pero en el caso de que fuesen 3 tablas, tendría que agregar otro UNION ALL y la consulta SELECT abajo?

-----------

Recién pude probar, me auto-respondo: Sí, agregas otro UNION ALL.

Gracias a todos los que intentaron ayudarme, en especial a Nano_.

Última edición por Slackz; 01/10/2010 a las 09:13
  #17 (permalink)  
Antiguo 01/10/2010, 10:19
Avatar de Slackz  
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Como mostrar resultados de varias tablas mysql con php

Problemilla al mostrar...

Al final la consulta quedó así:

Código PHP:
Ver original
  1. SELECT dias.titulo as diastitulo, dias.id as diasid, dias.info as diasinfo
  2.         FROM dias
  3.         WHERE (dias.titulo LIKE '%$palabra%'  OR   dias.info  LIKE '%$palabra%')
  4.         UNION ALL
  5.         SELECT articulos.titulo as articulostitulo, articulos.detalle as articulosdetalle, articulos.id as articulosid
  6.         FROM articulos
  7.         WHERE (articulos.titulo LIKE '%$palabra%'  OR articulos.detalle LIKE '%$palabra%')
  8.         UNION ALL
  9.         SELECT clasificados.titulo as clasificadostitulo, clasificados.codigo as clasificadoscodigo, clasificados.info as clasificadosinfo
  10.         FROM clasificados
  11.         WHERE (clasificados.titulo LIKE '%$palabra%'  OR  clasificados.info  LIKE '%$palabra%')
  12.         UNION ALL
  13.         SELECT clasificados.tipo as proptipo, clasificados.codigo as propcodigo, clasificados.info as propinfo
  14.         FROM clasificados
  15.         WHERE (clasificados.tipo LIKE '%$palabra%'  OR  clasificados.operacion  LIKE '%$palabra%')
  16.         UNION ALL
  17.         SELECT clasificados_autos.codigo as autoscodigo, clasificados_autos.marca as autosmarca, clasificados_autos.modelo as autosmodelo
  18.         FROM clasificados_autos
  19.         WHERE (clasificados_autos.marca LIKE '%$palabra%'  OR  clasificados_autos.modelo  LIKE '%$palabra%')
  20.         UNION ALL
  21.         SELECT amarillas.idusuario as aidusuario, amarillas.rubro as arubro, amarillas.nombre as anombre
  22.         FROM amarillas
  23.         WHERE (amarillas.rubro LIKE '%$palabra%'  OR  amarillas.nombre  LIKE '%$palabra%')

y la forma que utilizo para darle formato a cada resultado es esta:

Código PHP:
Ver original
  1. if($diastitulo != NULL)
  2. {
  3.     echo '
  4. <table width="550" border="0" cellspacing="0" cellpadding="0">
  5. <tr>
  6. <td height="20" align="left" valign="middle" scope="row"><a href="/ver-dias/'.$row['diasid'].'">'.$diastitulo.'</a></td>
  7. </tr>
  8. <tr>
  9. <td height="20" align="left" valign="middle" scope="row">'.$row['diasinfo'].'</td>
  10. </tr>
  11. <tr>
  12. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Días de la Semana</td>
  13. </tr>
  14. </table>
  15.     ';
  16. }
  17. elseif($articulostitulo != NULL)
  18. {
  19.     echo '
  20. <table width="550" border="0" cellspacing="0" cellpadding="0">
  21. <tr>
  22. <td height="20" align="left" valign="middle" scope="row"><a href="/articulo/'.$row['articulosid'].'">'.$articulostitulo.'</a></td>
  23. </tr>
  24. <tr>
  25. <td height="20" align="left" valign="middle" scope="row">'.$row['articulosdetalle'].'</td>
  26. </tr>
  27. <tr>
  28. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Mercado</td>
  29. </tr>
  30. </table>
  31.     ';  
  32. }
  33. elseif($clasificadostitulo != NULL)
  34. {
  35.     echo '
  36. <table width="550" border="0" cellspacing="0" cellpadding="0">
  37. <tr>
  38. <td height="20" align="left" valign="middle" scope="row"><a href="/clasificados/detalle/'.$row['clasificadoscodigo'].'">'.$clasificadostitulo.'</a></td>
  39. </tr>
  40. <tr>
  41. <td height="20" align="left" valign="middle" scope="row">'.$row['clasificadosinfo'].'</td>
  42. </tr>
  43. <tr>
  44. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Clasificados</td>
  45. </tr>
  46. </table>
  47.     ';
  48. }
  49. elseif($proptipo != NULL)
  50. {
  51.     echo '
  52. <table width="550" border="0" cellspacing="0" cellpadding="0">
  53. <tr>
  54. <td height="20" align="left" valign="middle" scope="row"><a href="/propiedades/detalle/'.$row['propcodigo'].'">'.$proptipo.' '.$row['propoperacion'].'</a></td>
  55. </tr>
  56. <tr>
  57. <td height="20" align="left" valign="middle" scope="row">'.$row['propinfo'].'</td>
  58. </tr>
  59. <tr>
  60. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Propiedades</td>
  61. </tr>
  62. </table>
  63.     ';
  64. }
  65. elseif($autosmarca != NULL)
  66. {
  67.     echo '
  68. <table width="550" border="0" cellspacing="0" cellpadding="0">
  69. <tr>
  70. <td height="20" align="left" valign="middle" scope="row"><a href="/automoviles/detalle/'.$row['autoscodigo'].'">'.$autosmarca.' '.$row['autosmodelo'].'</a></td>
  71. </tr>
  72. <tr>
  73. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Automóviles</td>
  74. </tr>
  75. </table>
  76.     ';;
  77. }
  78. elseif($amarillasnombre != NULL)
  79. {
  80.     echo '
  81. <table width="550" border="0" cellspacing="0" cellpadding="0">
  82. <tr>
  83. <td height="20" align="left" valign="middle" scope="row"><a href="/ver-perfil/'.$row['aidusuario'].'">'.$amarillasnombre.'</a></td>
  84. </tr>
  85. <tr>
  86. <td height="20" align="left" valign="middle" scope="row">'.$row['arubro'].'</td>
  87. </tr>
  88. <tr>
  89. <td height="20" align="left" valign="middle" scope="row">Encontrado en: Amarillas</td>
  90. </tr>
  91. </table>
  92.     ';
  93. } else { }


El problema está en que utiliza el formato de días de la semana para todos los resultados, no utiliza el que le corresponde a cada tabla.

¿cómo podría hacerlo?

Etiquetas: mysql, resultados, tablas
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 22:34.