Comunidad de diseño web y desarrollo en internet online

Duda sobre como imprimir una consulta mysql

Citar            
MensajeEscrito el 19 Mar 2006 04:08 am
Hola.
Mi problema es que no se como hacer para imprimir una consulta mysql en dos partes del PHP y usando el mismo query.
Tengo 2 tablas mysql:
en una son equipos de futbol, con los datos del club.
en la otra, tengo jugadores de esos equipos.

y en el archivo php tengo que imprimir, en una parte, los datos del club, y en otra parte todos los jugadores que pertenezcan a ese club.

entonces, tengo esto:

Código :

$sql_clubes = "SELECT * FROM clubes, jugadores WHERE clubes.NOMBRE='".$_REQUEST['id_c']."' AND jugadores.EQUIPO=clubes.NOMBRE;";
$resultado = mysql_query($sql_clubes);



Si primero levanto los datos para la informacion de los clubes con

Código :

$registro=mysql_fetch_array($resultado);


Despues cuando quiero hacer un WHILE para los jugadores, usando el mismo query, no me los imprime. La unica solucion que le encontre es usar dos query distintos para la misma consulta.. pero lo ideal seria hacerlo con un solo query.

Alguna sugerencia, gracias de antemano

Saludos[/code]

Por PabloHdS

251 de clabLevel



 

msie
Citar            
MensajeEscrito el 19 Mar 2006 04:34 am
bueno, no entendi muy bien, pero seguro lo que buscas es unir dos tablas, eso se hace con INNER JOIN

ahora, que no veo cual es el problema de utilizar dos queries

un saludo

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 19 Mar 2006 04:52 am
sabes que puedes hacer esto?

Código :

$sql_clubes = "SELECT clubes.*, jugadores.nombre  FROM clubes, jugadores WHERE clubes.NOMBRE='".$_REQUEST['id_c']."' AND jugadores.EQUIPO=clubes.NOMBRE;";


y en realidad te aconsejo usar INNER JOIN o LEFT JOIN, en vez de hacer ese WHERE ;)

saludos

PD: yo tampoco entendi mucho en realidad :S

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 19 Mar 2006 05:04 am
bueno, voy a probar eso de INNER JOIN, aunque en realidad la consulta funcionaba bien, los resultados los tomaba. lo que no puedo lograr es imprimir todo bien. pero bueno, voy a ver como me las arreglo.
respecto a usar una o dos query, lo hago solo para optimizar el codigo. pero bueno..
Gracias

Saludos

Por PabloHdS

251 de clabLevel



 

msie
Citar            
MensajeEscrito el 20 Mar 2006 08:38 pm
Y por qué no lo traes mejor con un mysql_fetch_assoc() y economizas recursos.
Luego trabajas con el array asociativo.

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

firefox
Citar            
MensajeEscrito el 22 Mar 2006 05:22 am

pedro escribió:

Y por qué no lo traes mejor con un mysql_fetch_assoc() y economizas recursos.
Luego trabajas con el array asociativo.


bueno, a eso iba con el tema de hacer 1 query en lugar de 2, creo que de esa manera tambien usas menos recursos, hacer dos consultas a la base por algo que se puede consegir con una sola me parece mejor.
la consulta esta bien hecha, porque los resultados los devuelve. pero cuando quiero imprimir en el PHP. lo primero que va son los datos del club, y eso esta todo en una sola fila de la tabla (en distintos campos, claro). eso lo imprime bien, pero despues para imprimir el plantel de dicho equipo, hago un while para recorrer la tabla mysql con esos jugadores y no lo imprime.

Saludos

Por PabloHdS

251 de clabLevel



 

msie
Citar            
MensajeEscrito el 22 Mar 2006 04:04 pm
Asumo que le estas dando tratamiento de una array asociativo ¿sí?.
Si imprimes un elemento del array, debe mostrarlo...

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

firefox
Citar            
MensajeEscrito el 22 Mar 2006 07:17 pm
A ver. lo que yo hago es
Primero: hago la consulta a la base y despues el query

Código :

$sql_clubes = "SELECT * FROM clubes, jugadores WHERE clubes.NOMBRE='".$_REQUEST['club']."' AND jugadores.EQUIPO=clubes.NOMBRE ORDER BY jugadores.POSICION;";
$resultado = mysql_query($sql_clubes);


Despues tomo los datos del club y los imprimo

Código :

$registro = mysql_fetch_assoc($resultado);


Y al final un while para imprimir los jugadores

Código :

while($registro=mysql_fetch_assoc($resultado)){
      jugadores
}


si lo hago asi, me imprime bien los datos, y del listado de jugadores solo imprime algunos, no todos.

Algo estare haciendo mal.

Saludos

Por PabloHdS

251 de clabLevel



 

msie
Citar            
MensajeEscrito el 22 Mar 2006 07:20 pm
Exactamente ¿qué haces dentro del while? o sea, pon exactamente tu codigo por favor para ver si me alumbras por favor.

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

firefox
Citar            
MensajeEscrito el 22 Mar 2006 07:44 pm
a ver creo que el diseño de la BD esta mal, cuando relaciones dos hazlo por id, no por campos de tipo cadena. lo digo porque segun lo que veo tienes un diseño algo asi

Código :

jugador                        clubes
//campos                    //campos
nombre                      nombre [varchar]
equipo [varchar]


y tu relacion es de jugador.equipo con clubes.nombre, el diseño apropiado seria algo asi

Código :

jugador                                                    clubes
id [entero]  auto_increment campo clave      id [entero] auto_increment, campo clave
idEquipo [entero]                            nombre
nombre                                       //otros campos
//otro campos


y la relacion seria jugador.idEquipo y clubes.id, para una relacion 1:N [un club puede tener muchos jugadores, y un jugador solo puede pertenecer a un equipo], si los jugadores pueden pertenecer a varios equipos entonces habria que crear una tercera tabla para establecer la relacion de M:N.

Te hago esta recomendacion, porque aparte de que es la manera correcta de hacerlo, es más facil hacer la comparación con un numero que con una cadena, ya que con una cadena se te puede escapar un espacio en blanco, que sinceramente es lo que creo que sea tu problema ;)

Como te dije en el post pasado, es mejor usar LEFT JOIN o INNER JOIN, y no un WHERE en ese caso. Aqui te dejo la consulta con LEFT JOIN:

Código :

$sql = "SELECT jugadores.nombre, clubes.* FROM jugadores LEFT JOIN clubes ON clubes.NOMBRE='".$club."' AND jugadores.EQUIPO= clubes.NOMBRE ORDER BY jugadores.POSICION DESC"; 


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 01 Abr 2006 03:11 am
Bueno, retomo el tema porque tengo otra pregunta para hacerles que se relaciona mucho con mi pregunta inicial. Antes que nada, gracias a todos los que respondieron.
Ahora mi duda es. tengo un menu de formulario que lo genero mediante PHP y mysql.
el codigo que tengo es el siguiente:

Código :


$sql_mostrar = "SELECT EQ FROM posiciones_nb ORDER BY EQ;";
$resultado = mysql_query($sql_mostrar);
while($registros=mysql_fetch_array($resultado)){
   echo "<option value=".$registros['EQ'].">".$registros['EQ']."</option>";
}



de esa forma se arma el menu con un listado de equipos.
Lo que yo tengo que hacer es mostrar ese menu dos veces en el mismo PHP. Cuando quiero imprimirlo por segunda vez, no lo imprimime. De la unica forma que logro hacerlo es duplicando el mysql_query, pero es medio tonto hacerlo, supongo que debe de haber una forma de poder imprimir dos veces lo mismo usando un mismo query.

Saludos

Por PabloHdS

251 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Abr 2006 04:52 am
antes de mostrarlo x segunda vez debes poner este codigo

Código :

mysql_data_seek($result, 0);


lo q hace esta funuion en ponerte al principio del query nuevamente... ya q la funcion mysql_fetch_array te va moviendo el puntero hasta llegar a al ulima posicion y se keda ahi hasta q vos la cambies

Con lo anterior haces q el puntero vuelva al principio y puedas recorrerla nuevamente

salu2

Por 3w

145 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 01 Abr 2006 10:17 am
que sencillo era :D
gracias por la respuesta, era asi nomas como decis..

Por PabloHdS

251 de clabLevel



 

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.