Foros del Web » Programando para Internet » PHP »

¿Si o si dos query para lo siguiente?

Estas en el tema de ¿Si o si dos query para lo siguiente? en el foro de PHP en Foros del Web. Hola, tengo un query para desplegar noticias según la sección donde estén: Código PHP: $id_seccion  =  $_GET [ 'id_seccion' ]; $resultado  =  mysql_query ( "SELECT noticias.*, secciones.seccion FROM noticias, secciones WHERE ..." ...
  #1 (permalink)  
Antiguo 19/07/2006, 12:47
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 16 años, 9 meses
Puntos: 535
¿Si o si dos query para lo siguiente?

Hola, tengo un query para desplegar noticias según la sección donde estén:

Código PHP:
$id_seccion $_GET['id_seccion'];
$resultado mysql_query("SELECT noticias.*, secciones.seccion FROM noticias, secciones WHERE ...");

while(
$datos mysql_fetch_array($resultado)){
    
//muestro las noticias.


Ok, quiero ponerle al tag <title> el nombre de la sección en la que estamos. Para ello hice esto:

Código PHP:
<?
$id_seccion 
$_GET['id_seccion'];
$resultado mysql_query("SELECT noticias.*, secciones.seccion FROM noticias, secciones WHERE ...");

if(
$datos mysql_fetch_array($resultado)){
    
$tag_title $datos['seccion'];
}
?>
<html>
<title>Nombre sitio / <? echo $tag_title?></title>
<body>
<?
while($datos mysql_fetch_array($resultado)){
    
//muestro las noticias.
}
?>
</body>
¿Qué ocurre? Que ahora el listado de noticias (el while) tiene un "registro" menos!

Es "como si" el array $datos, al ser "invocado" por el if, se moviera automáticamente al próximo elemento del array (sory, se que está mal expresado)

¿Cómo se podría solucionar -idealmente usando sólo un query-?
__________________
...___...
  #2 (permalink)  
Antiguo 19/07/2006, 12:54
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 11 años, 5 meses
Puntos: 0
Y si usas

Código PHP:
mysql_data_seek($resultado,0); 
Creo q te pondría el puntero en el primer elemento de nuevo...
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 19/07/2006, 12:54
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.653
Antigüedad: 12 años, 5 meses
Puntos: 88
do
{
//muestro las noticias.
}
while($datos = mysql_fetch_array($resultado));

lo único en lo que te puedo ayudar en este momento es que utilices esto con esto, a mi me funcionó cuando tuve un problema similar.
Espero t sea de ayuda.
salu2
  #4 (permalink)  
Antiguo 19/07/2006, 13:05
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 14 años
Puntos: 0
Me suena

Hola !!

Te propongo dos opciones a ver que te parecen:

1.- Cuando coges la primera fila ademas de pintar el titulo pintar ya de paso la primera noticia.

Esta te gustará más :
2.- Antes del bucle while mover el puntero a la primera fila con la funcion mysql_data_seek.
Lo cual creo que se hace asi: mysql_data_seek($resultado,0)
Ahora el bucle comenzará por donde tu quieres.

Buena suerte!!!
  #5 (permalink)  
Antiguo 19/07/2006, 13:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
¿Qué ocurre? Que ahora el listado de noticias (el while) tiene un "registro" menos!

Eso es así por qué las funciones "_fetch_" lo que hacen es recorrer el resultado a cada llamada de tu función moviendo el puntero interno del resultado una posición hacia adelante .. por eso se usa bajo una estructura "While($row=mysql_fetch_array($resultado))" y va muy bien en ese caso.

Para volver a "recorrer" nuevamente tu "record-set" desde el principio con la función que te han mencionado: mysql_data_seek() mueves el puntero a la posición que necesites (en tu caso al principio: 0) y vuelves aplicar tu "while()" típico .. así tantas veces como necesites...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 19/07/2006, 13:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 14 años
Puntos: 0
Vaya, perdon por haber puesto lo mismo que el primer compañero, no es que quisiera repetir lo mismo, solo que el respondió mientras yo escribia mi respuesta.
  #7 (permalink)  
Antiguo 19/07/2006, 13:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se me olvidó ..

También puedes usar:

mysql_result() para ir directo a cierto resultado .. en tu caso sabes que es el primer resultado y cierto campo:

Código PHP:
$seccion=mysql_result($resultado,0,"seccion"); 
Esta función -no- mueve el puntero .. así que no tendrías problemas en luego recorrer tu consulta con el "while()" ...

De hecho para lo que pretendes hacer es más óptimo si sabes que sólo necesitas un resultado (cualquiera por la estructura del resultado que obtienes).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 19/07/2006, 13:23
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 16 años, 9 meses
Puntos: 535
Genial, voy a usar mysql_result() en este caso pero la explicación del porque el _fetch_ mueve el puntero me aclara un importante concepto (así como para qué sirve mysql_data_seek)

__________________
...___...
  #9 (permalink)  
Antiguo 19/07/2006, 13:28
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 16 años, 9 meses
Puntos: 535
Sólo una cosa:
Usé mysql_result() pero igualmente faltaba un registro en el "recordset", así que igualmente hice uso de las dos nuevas funciones recién aprendidas :)

Código PHP:
$tag_titulo mysql_result($resultado,0,"seccion");
mysql_data_seek($resultado,0); 
__________________
...___...
  #10 (permalink)  
Antiguo 19/07/2006, 13:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Al Zuwaga
Sólo una cosa:
Usé mysql_result() pero igualmente faltaba un registro en el "recordset", así que igualmente hice uso de las dos nuevas funciones recién aprendidas :)

Código PHP:
$tag_titulo mysql_result($resultado,0,"seccion");
mysql_data_seek($resultado,0); 
mmm ... Se supone que mysql_result() no mueve el puntero ...

¿Será que tienes algún _fetch_ por ahí antes (de verte obligado a mover el puntero a mano con _data_seek())

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 19/07/2006, 13:41
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 16 años, 9 meses
Puntos: 535
No, el único fetch que tengo lo tengo en el while.
También revisé en dos includes (en donde hago sendos mysql_query()) pero no hay nada que puedas estar interfiriendo en ellos.

Bueno, no sé... será mi PC es un tanto extravagante
__________________
...___...
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 14:48.