Foros del Web » Programando para Internet » PHP »

Problema haciendo consultas a varias tablas

Estas en el tema de Problema haciendo consultas a varias tablas en el foro de PHP en Foros del Web. bueno, me presento, soy un poco nuevo en esto, y toy con muchas de aprender e ir haciendo cosas en php con sql, de momento ...
  #1 (permalink)  
Antiguo 12/04/2005, 13:40
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
Problema haciendo consultas a varias tablas

bueno, me presento, soy un poco nuevo en esto, y toy con muchas de aprender e ir haciendo cosas en php con sql, de momento solo e hecho webs con phpnuke, foros ipb, phpbb... bueno de esos entre otros, pero ahora ya toy haciendo mi propia web con mi propio codigo, bueno, es lo que intento.

pasando a mi consulta, que es la siguiente.

estoy haciendo un modulo que gestione links, e informacion. La idea es q por medio de un formulario inserte datos en la base de datos, y hasta ahi voy muy bien, me a resultado eso, y la extraccion de datos tambien, pero no del todo, me explico.

tengo creadas dos tablas en la base de datos

base de datos >> modulo_nuevo
tablas >> tabla_info - tabla_datos

cada una de ellas con clave principal id y que contienen mas campos.

bueno, la idea es la siguiente, de momento necesito extraer datos, osea, hacer la consulta de los datos en un archivo, pero ahi solo e kedado hasta la mitad, les muestro el codigo.

Código PHP:
<?
include("conectar.php"); 
$link=Conectarse();
$anime=$_GET['anime'];
$sql mysql_query("SELECT * FROM tabla_info WHERE id = '$anime'");
while (
$row mysql_fetch_array($sql)){
echo 
"<table class=\"serietable\" width=\"800\">";
echo 
"          <tbody><tr><td colspan=\"2\" class=\"pagetitle\">$row[tituesp]</td></tr>";
echo 
"         <tr>";
echo 
"            <td rowspan=\"2\" valign=\"top\"><img src=\"$row[imagengaler]\" alt=\"$row[tituesp]\"></td>";
echo 
"            <td>";
echo 
"          <table class=\"serie_desc\">";
echo 
"          <tbody><tr>";
echo 
"                <td><b>Categoria</b> : $row[categoria]";
echo 
"          </tr>";
echo 
"          <tr><td><b>Genero</b> : $row[genero]</td></tr>";
echo 
"<tr>";
echo 
"            <td><b>Fansub</b> : <a href=\"http://#\">$row[studio]</a></td>";
echo 
"</tr>";
echo 
"            <td><b>Capitulos</b> : $row[numecapitotal]</a>  </td>";
echo 
"          </tr>";
echo 
"<tr>";
echo 
"<td><b>Estado</b> : <b><font color=\"#1AB141\">Completa</font></b></a></td>";
echo 
"</tr>";
echo 
"            <td><b>Web oficial</b> : <a href=\"$row[wwwofi]\">$row[wwwofi]</a></td>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"           <td><b>Sinopsis</b> : <div class=\"synopsis\"><center>";
echo 
"$row[info]</center></div></td></tr>";
echo 
"</tbody></table>";
con eso me muestra lo que tengo en la base de datos, de la tabla "tabla_info", pero aki viene mi gran problema, tambien necesito que me haga una buskeda de datos en otra tabla de la misma base de datos, q es la de "tabla_datos", haber, explico tambien que este archivo es recibido por un get q contiene el id del registro de los datos q voy a consultar, y los trate de vincular con los otros, pero ahi toy viendo como lo hago, porque hasta el momento no e podido >_< pero espero lograrlo si no, pedire ayuda ^^, bueno, si desviarme, hice un campo en la tabla "tabla_datos" que se llama "id_cateanime" que no tiene ninguna asignacion especial como clave, ya q le puse un id principal que para no desordenar, bueno, eso no se si sera lo mas correcto, pero recuerdo q toy aprendiendo, bueno, ese campo "id_cateanime" contiene como dato el id de los datos de la otra tabla, la q intento vincular "tabla_info".

aki les muestro lo que kiero hacer

Código PHP:
$link=Conectarse();
$anime=$_GET['anime'];
$sql2 mysql_query("SELECT * FROM tabla_datos WHERE id_cateanime = '$anime'");
while (
$row mysql_fetch_array($sql2)){
echo 
"</td></tr>";
echo 
"<tr><td>";
echo 
"<table width=\"100%\">";
echo 
"<tbody><tr><th colspan=\"4\">Releases</th></tr>";
echo 
"        <tr>";
echo 
"            <th>Nombre</th>";
echo 
"        <th>Peso</th>";
echo 
"        <th>Descargas</th>";
echo 
"        <th>Calidad</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<td><a href=\"$row[enlace]\">$row[capitulos]</a></td>";
echo 
"<td>$row[pesocapi]</td>";
echo 
"<td>0</td>";
echo 
"<td>$row[calidad]</td>";
echo 
"</tr>";
}
?> 
bueno, en resumen, esas dos consultas no me han resultado en un archivo, separe para que se viera un poko mejor para entenderlo, espero q se entienda.

yap, como decia, no me hace las dos consultas, no se como hacerlo, busque info y no me ayudo mucho, aclaro q el primer codigo q coloco me funciona bien, el problema es la buskeda de datos de la segunda parte del codigo ... ayuda plz... que llevo ya varios dias tratando de hacerlo y no e podido por eso les solicito su conocimiento ^^.

si algo no se entiende.. puede q si, me dicen, y tratare de explicar de otra manera, o les paso el codigo fuente, para q lo vean, o lo subo el proyecto a algun lado para q lo vena en linea.. bueno eso.. muchas gracias a los q puedan ayudar, y acepto criticas al codigo q hice, si me ayudaran a solucionar las fallas y todo eso ...

  #2 (permalink)  
Antiguo 12/04/2005, 18:20
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
a y tambien otra consulta, ya que la anterior no tubo mucho resultado ...

como puedo tomar datos de la base de datos e insertalos en un <select> son varios datos, y kiero q los coloke todos los datos de un campo alguien me podria ayudar en eso?
  #3 (permalink)  
Antiguo 12/04/2005, 19:26
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Hola

Para tu consulta necesitas usar un Join, algo asi:

SELECT t1.Dato, t1.Dato2, t2.Dato1, t2.Dato2
FROM tabla1 as t1
JOIN tabla2 as t2 on t1.ID = t2.ID

Prueba con eso...

Suerte!!

Lo de los select, seria algo asi:

<option value="<? $valor " ?>">texto</option>

Pero dentro de un while para todos los datos
  #4 (permalink)  
Antiguo 12/04/2005, 19:35
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
genial, ahora mismo lo pruebo , grax por la ayuda
  #5 (permalink)  
Antiguo 12/04/2005, 21:48
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
muy bien, creo q ya voy por buen camino, pero tengo un error, no se q pueda ser miren esta consulta estoy haciendo ahora

Código PHP:
$link=Conectarse();
$anime=$_GET['anime'];
$query mysql_query("SELECT * FROM modulo_anime INNER JOIN modulo_descargas ON modulo_anime.id=modulo_descargas.id_cateanime WHERE modulo_anime.id='$anime'");
$result mysql_query($query);
while (
$row mysql_fetch_array($result)){ 
Y me arroja el siguiente error

Cita:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\AppServ\www\xxx\ver.php on line 19
que es la linea donde me aparece esto

Código PHP:

while ($row mysql_fetch_array($result)){ 
bueno ahi voy.. creo q ya e simplificado mas y creo q al fin va funcionar esto ^^, pero como solucionar ese error, alguna idea?
  #6 (permalink)  
Antiguo 12/04/2005, 21:56
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Bueno

Mira, no he probado tu codigo, pero a parecer el $result no te esta dando datos (registros), por eso te marca error, puedes hacer esto

$link=Conectarse();
$anime=$_GET['anime'];
$query = mysql_query("SELECT * FROM modulo_anime INNER JOIN modulo_descargas ON modulo_anime.id=modulo_descargas.id_cateanime WHERE modulo_anime.id='$anime'");


//Vas a probar que la consulta funciona bien, y que te regresa datos:
//Esto parara el scriot y te escibira tal como quedo tu consulta, esto
//pegalo en tu administrador de base de datos y ejecutalo, seguramente ahi miraras rapido que error te arroja, y tambien si te esta regresando registros

die($query);

$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){


Despues de esto, tienes que saber algo, dependiendo del tipo de JOIN que usaes hace esto:

1. Te regresa datos si existe perfecta concordancia entre las tablas, es decir, si el ID = 2 no existe en la tabla 2, entonces no te regresara nada.

2. Te regresa datos aunque en la tabla 2 no exista el ID

3. Te regresa datos aunque en la tabla 1 no exista el ID

No lo recuerdo ahorita en MySql cual es exactamente cada uno y como trabaja, pero lee acerca de INNER JOIN - LEFT JOIN y RIGTH JOIN

Suerte!!
  #7 (permalink)  
Antiguo 12/04/2005, 22:13
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
probado el scrip, y me deja en blanco, osea no me arroja los datos , bueno, viendo en la base de datos, tengo
id de la tabla modulo_anime =2
id_cateanime de la tabla modulo_descarga =2

(el id_cateanime no es clave principal de la tabla, la tabla es asi

id >> clave principal
capitulos
enlaces
tipodescar
calidad
pesocap
id_cateanime >> esta no es principal, pero tiene el registro del "id" de la otra tabla osea asi kero vincularlas
)

bueno, asi voy, por lo menos el error ya no aparece, asi q vamos avanzando poko a poko
pd: Agradezco enormenente tu ayuda Neuron_376.
  #8 (permalink)  
Antiguo 12/04/2005, 22:18
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Felicidades !!

Todo esta en probar, meterte a tu codigo y ver que esta pasando, entonces mira, por lo que me dices, es muy probable que tienes algunos registros en tabla 1 que no estan en tabla 2...

Preuba directamente en tu administrador de bases de datos con la consulta que ya tienes, cambiar el INNER JOIN por LEFT JOIN y a su vez por RIGHT JOIN para ver que resultados tienes... tambien, asegurate que los tipos de datos son los mismos.

Tambien intenta consultas separadas, es decir:

select ID form tabla1
y
slect ID from tabla2

Y te fijas donde esta diferente.

Bueno, Suerte!!
  #9 (permalink)  
Antiguo 12/04/2005, 22:27
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
>_< error mio XD... mira lo que estaba mal era q puse "modulo_descargas" y era "modulo_descarga" hice eso de probar en el administrador de sql la consulta (que por cierto no sabia q se podia hacer, ya aprendi algo nuevo) y pues bien, con la consulta realizada me arrojo todos los campos para realizar los "$row" creo a ya ahora voy a ir bien.

mira el resultado q me arrojo en el navegador es esto

enlace >> ?anime=2

resultado navegador >> Resource id #5

pero en la sql me muestra los campos del ID 2 del modulo_anime y los campos de el modulo_descarga que tienen el "id_cateanime" igual a 2
  #10 (permalink)  
Antiguo 12/04/2005, 22:36
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
No se

Tendras que ver si esta correcta la consulta en el WHERE, y en el JOIN, el campo que estas usando para el JOIN, y asegurarte que el ID que estas pasando para el WHERE es correcto...

Bien, sigue probando eso, por el momento, no se, si veo algo te digo, pero no se me ocurre ahorita que pueda ser.

Suerte!
  #11 (permalink)  
Antiguo 12/04/2005, 23:35
Avatar de SAGITARIO  
Fecha de Ingreso: febrero-2005
Ubicación: Huancayo
Mensajes: 108
Antigüedad: 12 años, 9 meses
Puntos: 0
Claro

Hola amigo:

Neuron_376 tiene razon
Código PHP:
Biensigue probando esopor el momentono sesi veo algo te digopero no se me ocurre ahorita que pueda ser
Trabaja con

Código PHP:
select from tabla1,tabla2 where tabla1.cod=tabla2.cod 
esto debe funcionarte !!

Salu2.
  #12 (permalink)  
Antiguo 13/04/2005, 00:58
 
Fecha de Ingreso: abril-2005
Mensajes: 14
Antigüedad: 12 años, 8 meses
Puntos: 0
muchas gracias por la ayuda, creo q ya esta, acaba de funcionar, y me funciona de dos maneras.

la primera

Código PHP:
SELECT FROM modulo_anime INNER JOIN modulo_descarga ON modulo_anime.id=modulo_descarga.id_cateanime WHERE modulo_anime.id='$anime' 
y la segunda

Código PHP:
SELECT FROM modulo_anime,modulo_descarga WHERE modulo_descarga.id_cateanime='$anime' and modulo_anime.id=modulo_descarga.id_cateanime 
asi q buscando una solucion.. en el pso salieron 2

tambien lo otro q modifique fue esto

Código PHP:
die($query);

$result mysql_query($query);
while (
$row mysql_fetch_array($result)){ 
por esto

Código PHP:
while ($row mysql_fetch_array($query)){ 
y asi funciono xD

ahora solo tengo un solo problemilla, pero ya no es de consulta, es de como incluir los datos en archivo para que no me haga una repeticion cuando kiera insertar datos de la otra tabla, es q con cada registro de la segunda tabla q inserte, me agrega dos veces en el archivo, asi q toy haciendo el archivo de diseño para la muestra de los datos de nuevo, porque como pueden ver en el primer post puse el diseño, y todo incluye "$echo" asi q me repite XD lo del primero, y yo kiero q solo me vaya repitiendo el segundo .. no se si se entiende bueno eso xD.. pero en fin.. creo q lo mas complicado se soluciono. falta agradecerles por la ayuda y la rapidez y la paciencia ^^. grax ^^
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 15:50.