Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Relacion de 2 tablas multiples

Estas en el tema de Relacion de 2 tablas multiples en el foro de Mysql en Foros del Web. Hola a tod@s d nuevo ;) Llevo más d 3 días intentando solucionar un asunto q ya m tiene preocupado xq si no lo resuelvo ...
  #1 (permalink)  
Antiguo 17/09/2010, 18:13
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años, 8 meses
Puntos: 1
Relacion de 2 tablas multiples

Hola a tod@s d nuevo ;)

Llevo más d 3 días intentando solucionar un asunto q ya m tiene preocupado xq si no lo resuelvo habré 'tirado' casi un año!! diseñando una pág q sin eso no podré terminar nunca...

El caso es q tengo una tabla con clientes y otra con productos. A cada cliente le pueden corresponder varios productos, y lo q m gustaría es q si yo marco un id d un cliente determinado, m muestre todos los productos con ese mismo id d la tabla productos

Parece sencillo, pero a mi no m lo parece :(
Antes q nada siento repetir algo q se puede ver más o menos parecido en este mismo foro:
http://www.forosdelweb.com/f21/como-...ltados-587743/

Pero repito q no m sale. No sé qué hago mal pero no m sale
Les detallo un poco el asunto y la consulta sql:

Las tablas ya las saben y la relación q quiero es a través d la id de clientes (id),
y la id d productos (id_producto). Creé además una 3ª tabla tal y como salía en el ejemplo d esta web, llamada relaciona_p, con los únicos campos 'id', e 'id_producto'

la sql q he hecho es esta:
"SELECT c.*,p.* FROM clientes AS c,productos AS p,relaciona_p AS r WHERE (r.id = '$total_[$r]' AND r.id_producto = p.id_producto)"

Les explico el por qué de ese $total_[$r]: La consulta está dentro d un bucle for, y cada uno d los números d ese índice corresponden a cada una d las ids en forma d array; o sea, (15,18,19,26,29...), x ejemplo, lo q quiere decir q el valor $total[0] sería aquel d id 15, el $total[1] sería el d id 18 y así sucesivamente. Si pongo un valor fijo en vez del array sigue sin funcionar. El array existe xq previamente hace otra consulta q descarta las ids q no cumplen con un requisito previo.

No entiendo por qué falla. Lo hago exactamente igual q en el ejemplo salvo lo del array q no debería d ser importante, ¿o m equivoco completamente?

Lo cierto es q aunque lo ponga d forma "normal", sin array, tampoco funciona. ¿Sería alguien tan amable d intentar explicarme por qué?

Si necesitan alguna aclaración más, x favor, díganlo y la haré lo mejor q pueda

Muchas gracias x anticipado, aunque sólo sea x haberme leído
Salu2!
  #2 (permalink)  
Antiguo 17/09/2010, 20:05
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Relacion de 2 tablas multiples

Hola a tod@s. Creo haber resuelto medianamente el problema con la adición del siguiente código:

///la consulta la hago tal cual la del ejemplo d estos foros, fuera del bucle for

$sql = "SELECT c.*,p.* FROM clientes AS c,producto AS p,relaciona_p AS r WHERE (c.id = r.id AND p.id_producto = r.id_producto)";

$buscar = mysql_query($sql);
$row_buscar = mysql_fetch_array($buscar);


/////luego realizo un "barrido" (no sé muy bien cómo decirlo;) y meto las ids q m interesan en el array

do {
$total_[] = $row_buscar[0];
} while ($row_buscar = mysql_fetch_array($buscar));


////ahora realizo el bucle for

for($r=$init;$r<sizeof($total_);$r++) {
$sql_[$r] = "SELECT c.*,p.* FROM clientes AS c,producto AS p WHERE c.id = '$total_[$r]' AND c.id = p.id_producto";

$buscar_[$r] = mysql_query($sql_[$r]);
$row_buscar_[$r] = mysql_fetch_array($buscar_[$r]);
}

Y creo q con eso ya va listo el asunto. La única diferencia es q realizo una consulta fuera del bucle para hayar las ids q m interesan y luego las relaciono dentro del bucle for con el índice del array q corresponde al d las ids "válidas"

Seguiré experimentando y ya les comento algo a ver si todo va ok.

Si a alguien le interesa el código completo se lo pasaré de buen gusto. A lo mejor resulta q hoy soy yo quién le puede echar una mano a alguien ;)

Gracias nuevamente. Salu2!!!
  #3 (permalink)  
Antiguo 18/09/2010, 03:50
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Relacion de 2 tablas multiples

Cambio una línea xq m daba alguna incoherencia en los resultados:

///ESTA>>>>>>>
$sql_[$r] = "SELECT c.*,p.* FROM clientes AS c,producto AS p WHERE c.id = '$total_[$r]' AND c.id = p.id_producto";

///X ESTA>>>>>>
$sql_[$r] = "SELECT c.*,p.* FROM clientes AS c,producto AS p WHERE c.id = '$total_[$r]' AND p.id_producto = '$id_p[$r]'";

Donde $id_p es un array creado d igual forma q el array $total_

Salu2!!!
  #4 (permalink)  
Antiguo 18/09/2010, 08:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relacion de 2 tablas multiples

No se comprende bien por qué levantas en esta consulta todos los datos:
Código MySQL:
Ver original
  1. SELECT c.*, p.*
  2. FROM clientes AS c, producto AS p, relaciona_p AS r
  3. WHERE (c.id = r.id AND p.id_producto = r.id_producto)

Si en realidad solamente usas uno de ellos (el ID de cliente).
Además, usar el JOIN de esa forma puede ser poco eficiente. Yo personalmente recomiendo usar INNER JOIN (en tablas con muchos registros es mucho mejor):
Código MySQL:
Ver original
  1. SELECT c.*,p.*
  2. FROM clientes c INNER JOIN relaciona_p r ON r.id = c.id
  3. INNER JOIN producto p ON R.id_producto = p.id_producto;

Lo que no termino de comprender es para qué tomas esos valores para luego volver a tomar los mismos valores uno por uno.
¿Por qué lees una tabla y luego iteras la misma tabla sobre la base del ID?
¿Qué es exactamente lo que necesitas conseguir?

Si es un array de registros de la tabla, PHP tiene recursos para manejar eso sin complicarte tanto la vida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: multiples, relacion, 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 09:40.