Foros del Web » Programando para Internet » PHP »

Consulta BBDD a dos tablas a la vez

Estas en el tema de Consulta BBDD a dos tablas a la vez en el foro de PHP en Foros del Web. Hola amigos! Avanzando un poco en mi aprendizaje, quería saber cómo hacer una consulta a la BBDD accediendo a dos tablas a la vez. Me ...
  #1 (permalink)  
Antiguo 23/02/2009, 13:43
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Consulta BBDD a dos tablas a la vez

Hola amigos!

Avanzando un poco en mi aprendizaje, quería saber cómo hacer una consulta a la BBDD accediendo a dos tablas a la vez. Me explico:

Tengo una tabla "noticias" y otra "topicos", las noticias tinen una id_topic y la tabla topicos contiene varios temas como por ejemplo: Generales, Locales, Deportes...

Hasta ahora, para mostrar en la noticia el tópico hacía dos consultas a la BBDD: una para mostrar la noticia y otra para buscar y mostrar el topico usando WHERE id='$id_topic'.

Podrían decirme cómo hacer la consulta a la BBDD para hacerlo todo de una?

Les pongo un ejemplo de lo que hasta ahora usé:

Código PHP:
$id 1//mostramos la primera noticia por ejemplo
$sql "SELECT * FROM noticias WHERE id=$id";
$con mysql_query($sql);
while(
$row mysql_fetch_array($con)){

  echo 
$row['titulo'];

  
$id_topic $row['id_topic'];
  
$sql_topic "SELECT nombre_tema FROM topicos WHERE id=$id_topic";
  
$con_topic mysql_query($sql_topic);
  while(
$row_topic mysql_fetch_array($con_topic)){
    
    echo 
"Tema: ".$row_topic['nombre_tema'];
  }
  
//AQUÍ CUERPO NOTICIA

Algo así haría yo para mostrar las noticias, supongo que es código de principiante y que se puede optimizar muchísimo. Por eso quería que me dijerais cómo hacer todo eso en una consulta.

Un saludo y muchas gracias
__________________
http://www.fmsite.net/
  #2 (permalink)  
Antiguo 23/02/2009, 13:52
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Consulta BBDD a dos tablas a la vez

mmm una consulta podria ser:

Código PHP:
"SELECT * FROM noticias, topicos
 WHERE noticias.id_topic = topicos.id 
Esa consulta deberia entregarte todos los resultados de una...

Para accederlas de acuerdo a la tabla, seria topicos.nombre_tema o noticias.id o topicos.id y asi segun corresponda...


espero haber ayudado, saludos
  #3 (permalink)  
Antiguo 23/02/2009, 14:58
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Consulta BBDD a dos tablas a la vez

Gracias bLex

Errores de consulta no da, pero no imprime los resultados... desde mi ejemplo:

Código PHP:
$id 1//mostramos la primera noticia por ejemplo
$sql "SELECT * FROM noticias, topicos
 WHERE noticias.id=$id AND noticias.id_topic = topicos.id"
;
$con mysql_query($sql);
while(
$row mysql_fetch_array($con)){

echo 
$row['noticias.titulo']." del tema: ".$row['topicos.nombre_tema'];


Sería algo así? es que estoy probándolo y no lo muestra de esa manera... :S
__________________
http://www.fmsite.net/
  #4 (permalink)  
Antiguo 23/02/2009, 15:41
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Consulta BBDD a dos tablas a la vez

Sería de la siguiente forma:

Código PHP:
$id 1//mostramos la primera noticia por ejemplo
$sql "SELECT campo_titulo as titulo, campo_nombre_tema as nombre_tema FROM noticias left join topicos on (noticias.id_topic = topicos.id)
 WHERE noticias.id=$id"
;
$con mysql_query($sql);
while(
$row mysql_fetch_array($con)){

echo 
$row['titulo']." del tema: ".$row['nombre_tema'];


Con esto creo que lo tendrás correcto.
  #5 (permalink)  
Antiguo 23/02/2009, 15:47
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Consulta BBDD a dos tablas a la vez

Gracias jorgivaz... pero qué solución me darías si en vez de sólo tener que mostrar 2 cosa tuviera que mostrar como... 15 campos? y pongamos como ejemplo que en topicos tengo un campo llamado titulo y en noticias otro llamado titulo también.

Cómo lo haríamos entonces?
__________________
http://www.fmsite.net/
  #6 (permalink)  
Antiguo 23/02/2009, 15:54
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: Consulta BBDD a dos tablas a la vez

Pues la consulta sería poniendo los 15 campos que te interesan en el SELECT {aquí} FROM

Y para el tema de que se llamen igual, haría lo siguiente:

SELECT noticias.campo_titulo as noticia_titulo, topics.campo_titulo as topic_titulo

Y con eso funcionaría
  #7 (permalink)  
Antiguo 23/02/2009, 18:38
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Consulta BBDD a dos tablas a la vez

lo otro seria algo asi:

Código PHP:
$sql "SELECT * FROM noticias, topicos WHERE noticias.id_topic = topicos.id";
$res mysql_query($sql) or die(mysql_error());

for(
$i=0;$i<mysql_num_rows($res);$i++){

  echo 
mysql_result($res,$i,"noticia.titulo")."<br>";
  echo 
mysql_result($res,$i,"topico.nombre_tema");


Esto lo hice hace poco, y debiera ser asi... prueba y me cuentas como te bva


saludps
  #8 (permalink)  
Antiguo 23/02/2009, 19:07
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Consulta BBDD a dos tablas a la vez

si hay conflicto de campos utiliza

select t1.*, t2.* from t1 inner join t2 using(campo_comun) //aqui puden haber condiciones, etc

donde campo común es lo que en un es el PK en una tabla y la FK en la otra tabla
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #9 (permalink)  
Antiguo 24/02/2009, 12:06
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Consulta BBDD a dos tablas a la vez

Cita:
Iniciado por jorgivaz Ver Mensaje
Pues la consulta sería poniendo los 15 campos que te interesan en el SELECT {aquí} FROM

Y para el tema de que se llamen igual, haría lo siguiente:

SELECT noticias.campo_titulo as noticia_titulo, topics.campo_titulo as topic_titulo

Y con eso funcionaría
Hola, gracias por todas las respuestas,

Al final me quedo con éste tipo que cito.

Ahora... después qué utilizaríais? mysql_fetch_array()? mysql_fetch_row()? Cual es el más rápido y el que menos recursos necesita?

Un saludo y gracias de nuevo!
__________________
http://www.fmsite.net/
  #10 (permalink)  
Antiguo 25/02/2009, 19:41
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Consulta BBDD a dos tablas a la vez

ambas funciones hacen lo mismo, pero generalmente mysql_fetch_row se utiliza para un sólo registro, además los índice numéricos son más rápidos que las asociativas.

por otro lado sobre escribir quince campos en una consulta no crees que es mucho?, imagínate que harás join de 3,4 o más tablas, cuantos campos tendrás que escribir, analíza bien el código que escribes.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
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 21:56.