Foros del Web » Programando para Internet » PHP »

Datos de 2 Tablas relacionados

Estas en el tema de Datos de 2 Tablas relacionados en el foro de PHP en Foros del Web. hola amigos a ver si me explico bien porque siempre me hago la picha un lio. Tengo 2 tablas en una base de datos, una ...
  #1 (permalink)  
Antiguo 01/05/2005, 11:34
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Datos de 2 Tablas relacionados

hola amigos a ver si me explico bien porque siempre me hago la picha un lio.
Tengo 2 tablas en una base de datos, una tabla es ficha_chica y la otra fotos, dentro de la ficha de chicas tengo el id automatico, y cuando añado una foto en la tabla fotos asocio el id de ficha_chica a la foto.
Estoy sacando los datos por Columnas con este codigo:
Código PHP:
echo "<table width=\"95%\" border=\"1\" cellspacing=\"1\" cellpadding=\"2\">";

$sql "SELECT id, nombre FROM  ficha_chica WHERE piso=0 ORDER BY id DESC";
$result mysql_query($sql);

$columnes 7# Número de columnas (variable)

echo "<tr><td colspan=$columnes>$row</td></tr>"

for (
$i=1; list($id$nombre) = mysql_fetch_row($result); $i++) {
$resto = ($i $columnes); 
if (
$resto == 1) {echo "<tr>";} 

$sql_foto "SELECT foto FROM fotos ORDER BY id=$id ";
$fotos mysql_query($sql_foto);

    while(
$row=mysql_fetch_array($fotos)){
    
$foto_chi=".$row[foto].";
    }
    echo 
"<td align=\"center\" valign=\"top\"><img src='fotos/$foto_chi' width=\"100\" border=\"0\"  alt=\"$nombre \"><br>$nombre<br></td>"
    
    
if (
$resto == 0) {echo "</tr>";} 
}
if (
$resto <> 0) { 
$ajust $columnes $resto;
for (
$j 0$j $ajust$j++) {echo "<td></td>";}
}
echo 
"</tr>";
echo 
"</table>"
Mi problema es que el while que busca las fotos, no se como ponerlo para aparezca la foto en el TD que hay abajo, si pongo el cierre del while añadiendo el TD me aparecen las fotos pero se repiten los resultados muchas veces, y si no lo pongo la variable $foto_chi no contiene nada.

A ver si me podeis hechar un cable, gracias.
__________________
Seguro que ahora me sale mejor!
  #2 (permalink)  
Antiguo 01/05/2005, 15:18
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 4 meses
Puntos: 0
creo que tu problema de las repeticiones es que
while($row=mysql_fetch_array($fotos)){ siempre es true por eso no termina el while trata de contar los resultados con count(mysql_fetch_array($fotos)); y despues hacer el while correspondiente.
__________________
Shanti Castillo G.
  #3 (permalink)  
Antiguo 02/05/2005, 02:16
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
No le veo problema con el while... pero no entiendo bien cuál es la situación.

Primero decir que si se te repiten "varios" datos dentro de tu while es porque no tienes ninguna ondición que limite dichos resultados. Ve lo que tienes:
Código PHP:
$sql_foto "SELECT foto FROM fotos ORDER BY id=$id "
ves?? te falta un WHERE.. de hecho el "ORDER BY id=$id" esta mal... quizá si con el WHERE sigues teniendo varios resultados (si existen más de un campo con la misma id) necesites de un LIMIT ó quizá de un DISTINC()... el primero limita el número de resultados, el segundo elimina resultados repetidos...

Ahora bien... ¿dices que lo que tienes ahora no te funciona???... Ve el código fuente ¿qué te aparece??... Veo problemas con comillas y puntos... Tienes esto:
Código PHP:
while($row=mysql_fetch_array($fotos)){
    
$foto_chi=".$row[foto].";
    }
    echo 
"<td align=\"center\" valign=\"top\"><img src='fotos/$foto_chi' width=\"100\" border=\"0\"  alt=\"$nombre \"><br>$nombre<br></td>"
Sugiero esto:
Código PHP:
while($row=mysql_fetch_array($fotos)){
    
$foto_chi$row['foto'];
    }
    echo 
"<td align=\"center\" valign=\"top\"><img src=\"fotos/$foto_chi\" width=\"100\" border=\"0\"  alt=\"$nombre \"><br>$nombre<br></td>"
Por último mencionar que si solo vaz a obtener un resultado... ¿para qué hacer el while??, no es necesario:
Código PHP:
$resultadomysql_query("SELECT campos FROM tabla WHERE campo='condición'"$conexion);
$rowmysql_fetch_array($fotos);
echo 
"<td>".$row['campo']."</td><td>".$row['otro_campo']."</td>"
Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 02/05/2005, 04:32
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
Hola y gracias por tu aportacion jam1138, el while saca un solo dato dentro de otra tabla, es decir, la primera consulta aporta un ID y la segunda segun ese ID da la foto correspondiente, tu sugerencia me ha funcionado perferctamente $foto_chi= $row['foto']; parece ser que yo tenia mal la variable :/, lo que no me funciona es tu ultima propuesta, en teroria si ha de sacar solo un resultado puesto que el list del principio ya saca todas las ID correspondientes a ese piso=0, lo he provado asi:
Código PHP:
$sql_foto "SELECT foto FROM fotos ORDER BY id=$id ";
$fotos mysql_query($sql_foto);
$row=mysql_fetch_array($fotos);
echo 
"<td align=\"center\" valign=\"top\"><img src='fotos/".$row['foto']."' width=\"100\" border=\"0\"  alt=\"$nombre \"><br>$nombre<br></td>"
Un saludo y gracias.
__________________
Seguro que ahora me sale mejor!
  #5 (permalink)  
Antiguo 02/05/2005, 05:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pero y por qué no te ha resultado???... Algún mensaje de error?, ¿qué hay en el código fuente??... ... permiteme preguntar por segunda vez... ¿esta bien "ORDER BY id=$id"??... no me convenze... incisto que debería de ir un WHERE...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 02/05/2005, 07:14
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
SI pongo un where limito a un solo registro es decir cada chia diferente con la misma foto, eso no busco, con el while me da cada chica con su foto, piensa que etngo una tabla con los ID de chica y otra con los iD de chica+foto, eso me da que al pedir el list de cada chica, estas tengan un ID y ese ID me da la foto enlazada con ese ID en la tabla fotos. NO se si me entiendes si acaso me mandas tu msn por privado y hablamos mas trankilos aveces yo no me explico muy bien
__________________
Seguro que ahora me sale mejor!
  #7 (permalink)  
Antiguo 03/05/2005, 02:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Supongamos.. tengo un campo "nombre" y en ese campo tengo X registros iguales... supongamos .. "Juan"... entonces una consulta del tipo:
Código:
SELECT nombre FROM tabla WHERE nombre='Juan'
me regresará esos X registros... En tu caso este "campo nombre" sería tu campo de asociatividad... que es lo que quieres, según tengo entendido hasta ahora; Tienes una tabla, consultas un campo, tomas "un resultado" y buscas en otra tabla TODOS los registros que contengan "ese resultado" en un campo "auxiliar"... osease, tu campo de asociatividad.

Explicame cuál es tu idea al ocupar "ORDER BY id=$id"??... ORDER no debería servir más que para dar un orden y debería tener como único parámetro el nombre de un campo... no una igualdad como tienes ahora... de verdad me sorprende que no te arroje un error la sentencia... Lo correcto a lo que entiendo intentas hacer sería algo como:
Código:
SELECT campos FROM tabla WHERE campo='valor' ORDER BY campo 
Este es un foro, y su función es compartir/discutir abiertamente... eso es NO a consultas personales... temo que tendrás que esforzarte un poco más en plantear tus consultas (aunque creo entender esta) para que todos podamos participar y ayudarte... te recuerdo que eres tú el interezado.

Los datos para contectarme están disponibles abiertamente en este foro... pero he de advertirte que no uso el messenger... si acaso los fines de semana que es cuando estoy en casa... pero "si acaso" ... en fin...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 03/05/2005, 06:01
 
Fecha de Ingreso: abril-2005
Mensajes: 2
Antigüedad: 12 años, 7 meses
Puntos: 0
Hola a todos:

Yo estoy con jam1138 (Tanto en que el foro es algo abierto, como en la sentencia).
El ORDER by sirve para ordenar los registros, no para limitar la busqueda. Para eso está WHERE.

Asi mismo, me entra una duda. Si el resultado es unicamente una foto (y solo puede ser una, no es mas interesante utilizar mysql_result?

Sabiedo que solo puede ser una, buscas en la primera y ya esta, asi no utilizas bucles que no son necesarios.

De todas maneras no soy ningun experto, y tal vez no soy el mas indicado para contribuir, pero me parecia importante aportar esto.
  #9 (permalink)  
Antiguo 04/05/2005, 12:54
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 16 años, 1 mes
Puntos: 0
NO a ver, tengo una tabla con nombres de chicas, estas son distintas, entonces saco su ID unica de cada chica.
Ahora tengo otra tabla, fotos con dos campos id y foto, ahroa si pido la chica con ID 25 quiero una foto con el ID 25 es decir la chica ID 25 tiene relacionada 30 fotos en la tabla de fotos cullo ID es 25 (el ID de fotos no es unico es referenciado de cada chica) asique es lo que hago en la primera sentencia, pido todas las chicas ordenandolas por si ID desde la tabla chicas, y luego pido todas las fotos con id asociado el id de una chica, pero solo muestro una foto por ID en este caso la que haya por defecto.
__________________
Seguro que ahora me sale mejor!
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 18:36.