Foros del Web » Programando para Internet » PHP »

Optimizando Consultas

Estas en el tema de Optimizando Consultas en el foro de PHP en Foros del Web. Bueno estoy tratando de optimizar mis llamdas a la DB, estuve leyendo un poco en el foro y me sirvió de mucho pero aun estoy ...
  #1 (permalink)  
Antiguo 08/11/2005, 06:35
Avatar de roswell  
Fecha de Ingreso: abril-2004
Ubicación: Buenos Aires
Mensajes: 80
Antigüedad: 13 años, 8 meses
Puntos: 0
Exclamación Optimizando Consultas

Bueno estoy tratando de optimizar mis llamdas a la DB, estuve leyendo un poco en el foro y me sirvió de mucho pero aun estoy con un problema que no puedo solucionar. Les paso a comentar:

En la portada de mi web, muestro noticias destacadas y noticias breves, ahora bien para mostrarlas quiero hacer un unico llamada a la db y que me devuelva los resultados y luego ir acomodandolos con condicionales.

Código PHP:
$result "SELECT sid, aid, title, time, hometext, bodytext, ihome FROM noticias WHERE catid='2' order by time DESC LIMIT 0,2";

$sql mysql_query($result) or die ("Error: ".mysql_error());
while (list(
$s_sid$aid$title$time$hometext$bodytext$ihome) = sql_fetch_row($sql)) { 
Eso llama a dos noticias destacadas, lo que quiero hacer es poder llamar a las noticias de id='24' y id='1' y tambien mostrarlas con un while en otra parte del home de mi web y que para las que son id=24 mostrar 10 noticias y para las que son id=1 mostrar 3 solamente. Cosa de poder llamar a todas con una sola query y no con 3 querys distintas.

Espero se haya entendido y alguien pueda orientarme, ya que estoy medio mareado.

Muchas Gracias de antemano.

Estuve trando de encontrar la vuelta pero no puedo.
  #2 (permalink)  
Antiguo 08/11/2005, 06:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ese mismo "$sql" (podrías llamarlo "$resultado" .. o algo así para no confundir), lo puedes "re-utilizar" tantas veces como quieras.

Para eso, sólo debes mover el puntero del resultado hacia el principio con:
mysql_data_seek()

Y de ahí volver a usar tu while() o lo que uses para acceder nuevamente a los resultados que se obtuvieron de la ejecución de mysql_query() ..

Un saludo,
  #3 (permalink)  
Antiguo 08/11/2005, 06:59
Avatar de roswell  
Fecha de Ingreso: abril-2004
Ubicación: Buenos Aires
Mensajes: 80
Antigüedad: 13 años, 8 meses
Puntos: 0
Gracias, comprendo. Ahora en mi consulta a la db yo consulto a catid='2', como puedo adaptarlo para que la misma consulta me devuelva los que son catid='0'.

Yo probe con el while pero no le encontre la forma correcta.

Gracias.
  #4 (permalink)  
Antiguo 08/11/2005, 07:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Gracias, comprendo. Ahora en mi consulta a la db yo consulto a catid='2', como puedo adaptarlo para que la misma consulta me devuelva los que son catid='0'.
Te refieres a esto?:
Código PHP:
$result "SELECT sid, aid, title, time, hometext, bodytext, ihome FROM noticias WHERE catid='2' order by time DESC LIMIT 0,2"
Si quieres los registros que cumplan la condición "catid='0'" tendrías que volver a realizar tu consulta SQL a tu BD como creo que ya lo haces ...

No sé que ta optimo será hacer algo tipo:
Código PHP:
$result "SELECT sid, aid, title, time, hometext, bodytext, ihome FROM noticias WHERE catid='2' AND catid='0' order by time DESC LIMIT 0,2"
Para luego tener que hacer un "if" a la hora de presentar tus datos para saber si el registro que estás recorriendo es de la "catid" 2 o 0 ..

Te ahorrarias una consulta a tu BD .. pero harías una que arroja más resultados y ten presente el proceso que cargarías a PHP para esa validación "if()" que necesitarías ...

Un saludo,
  #5 (permalink)  
Antiguo 08/11/2005, 07:41
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Si quiere ambos debiera usar OR.

Código PHP:
$result "SELECT sid, aid, title, time, hometext, bodytext, ihome FROM noticias WHERE catid='2' OR catid='0' order by time DESC LIMIT 0,2"
  #6 (permalink)  
Antiguo 08/11/2005, 14:56
Avatar de roswell  
Fecha de Ingreso: abril-2004
Ubicación: Buenos Aires
Mensajes: 80
Antigüedad: 13 años, 8 meses
Puntos: 0
perfecto, muichas gracias. Voy a hacer pruebas y ver que me combiene
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 12:37.