Foros del Web » Programando para Internet » PHP »

simplificar codigo ( de nuevo :P)

Estas en el tema de simplificar codigo ( de nuevo :P) en el foro de PHP en Foros del Web. Código PHP: $categoria  =  $_GET [ 'categoria' ]; include( '../conec_bd.php' ); $query  =  "SELECT * FROM temas JOIN usuarios ON temas.id_user = usuarios.id_user  Where id_categoria=$categoria ORDER BY ultima_resp DESC LIMIT 30" ; $result =  mysql_query ( $query , $conexion ); while ( ...
  #1 (permalink)  
Antiguo 12/01/2008, 20:47
 
Fecha de Ingreso: enero-2008
Ubicación: en Punta Arenas
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
simplificar codigo ( de nuevo :P)

Código PHP:
$categoria $_GET['categoria'];
include(
'../conec_bd.php');
$query "SELECT * FROM temas JOIN usuarios ON temas.id_user = usuarios.id_user 
Where id_categoria=$categoria ORDER BY ultima_resp DESC LIMIT 30"
;
$resultmysql_query($query,$conexion);
while (
$tema=mysql_fetch_array($result)){//Abre while
echo "<a href=mostrar_tema.php?id_tema=$tema[id_tema]&categoria=$tema[id_categoria]>$tema[titulo_tema]</a>, $tema[nick]" ;
$consultamysql_query("SELECT * FROM respuestas WHERE id_tema='$tema[id_tema]'",$conexion);
$num_rows mysql_num_rows($consulta);
echo 
" | Respuestas:$num_rows<br>";

//Cierra While 
Miren tengo ese codigo, ke me funciona bien(estoy haciendo pruebas solamente, para aprender xD)
esto me genera algo como esto:

titulo de un tema , Por luck | Respuestas:1

lo que queria saber es como simplificar el codigo para que me muestre el numero de respuestas que tiene, como ven hay ise una consulta dentro de un while y luego hago un
Código PHP:
$num_rows mysql_num_rows($consulta); 
para que me muestre el numero de la cantidad de respuestas que hay en determinado tema

pero como me dijieron ayer es puede provocar algun tipo de relentizacion y ese tipo de cosas
Bueno eso

Gracias. :D

Última edición por luckxhor; 12/01/2008 a las 20:53
  #2 (permalink)  
Antiguo 12/01/2008, 22:45
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: simplificar codigo ( de nuevo :P)

Pues si entiendo bien lo que haces, es una consulta para traer el tema buscado y sus respuestas, por que no pones un campo en tu base de datos del numero de respuestas y cuando haces la consulta para obtener el tema tambien te traes el numero de respuestas, obvio cuando alguien ponga una respuesta nueva incrementas el numero de respuestas en la base.

De entrada te ahorraias lo del rows, ya que te traerias el numero en la primer consulta que haces.

De momento no se me ocurre algo mas.
  #3 (permalink)  
Antiguo 12/01/2008, 23:07
Avatar de Infernal  
Fecha de Ingreso: septiembre-2004
Ubicación: Tamaulipas, Mexico
Mensajes: 124
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: simplificar codigo ( de nuevo :P)

lo que dice kipiloko esta bien y de hecho es lo mejor si lo que buscas es un sistema muy optimizado, de lo contrario podrias usar tambien consultas anidadas:

Código PHP:
SELECT *, (SELECT COUNT(*) FROM respuestas WHERE id_tema=temas.id_tema) AS numero_respuestas FROM temas JOIN usuarios ON temas.id_user usuarios.id_user 
Where id_categoria
=$categoria ORDER BY ultima_resp DESC LIMIT 30 
Ademas para optimizar mas la consulta define los campos en el SELECT en lugar de usar el *.

Saludos
  #4 (permalink)  
Antiguo 13/01/2008, 11:32
 
Fecha de Ingreso: enero-2008
Ubicación: en Punta Arenas
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: simplificar codigo ( de nuevo :P)

muchas gracias :D
y si
voy a ahcer lo primero que me dijieron
que seria
un insert a la tabla respuestas y hacer otro con un update a la tabla de temas
o se puede unir los 2 ?

onda insert (asdasd,asdasd,asdasd) values (asdasd,asdasdasd,asdasd) where tema=idtema
AND update etc etc?
  #5 (permalink)  
Antiguo 13/01/2008, 22:23
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: simplificar codigo ( de nuevo :P)

Cita:
Iniciado por luckxhor Ver Mensaje
muchas gracias :D
y si
voy a ahcer lo primero que me dijieron
que seria
un insert a la tabla respuestas y hacer otro con un update a la tabla de temas
o se puede unir los 2 ?

onda insert (asdasd,asdasd,asdasd) values (asdasd,asdasdasd,asdasd) where tema=idtema
AND update etc etc?
Seria por separado un Insert y un Update, por que son ejecuciones diferentes. Y que en este caso no te preocupe la velocidad, ya que no afectan en nada en cambio la consulta si por que dependia de la cantidad de datos.

Espero que te vaya bien, ya nos platicaras como te va con lo que estas haciendo.
  #6 (permalink)  
Antiguo 14/01/2008, 00:53
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: simplificar codigo ( de nuevo :P)

Si se trata de optimizar... no es lo mismo esto:

Código PHP:
$tema[id_tema
que esto:

Código PHP:
$tema['id_tema'
Debes usar comillas simples, la segunda opción es la mejor y la correcta. La primera si bien funciona, es mas lenta por razones que no vienen al caso.

Comento esto, porque has estado usando la primera modalidad en tus ejemplos.

Saludos
  #7 (permalink)  
Antiguo 14/01/2008, 10:13
 
Fecha de Ingreso: enero-2008
Ubicación: en Punta Arenas
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: simplificar codigo ( de nuevo :P)

hey muchas gracias, ya lo arregle y cambie eso de $tema[asd] por la segunda que me dijiste y los deje todos asi ( "otro texto".$tema['asd']."sigue el texto";
pues tenias razon en el php designer 2007 al poner esto: $tema[id_tema] me decia que es un string especial
en cambio lo otro no lo deja como una matriz
  #8 (permalink)  
Antiguo 14/01/2008, 10:22
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: simplificar codigo ( de nuevo :P)

Barbaro!
En el primer caso:

$tema[id_tema]

PHP lo que hace es preguntarse id_tema es una constante?? Y la busca, en el caso de que sea falsa la suposición, recién ahi pregunta, será un índice del array??
(para plantearlo de una manera sencilla obvio).

Entonces, si bien son milésimas de segundos, cuando tienes 400 o 500 o más arrays definidos así, pues se hace una diferencia. Además, mientras más trabajo le ahorremos al motor, menos combustible vamos a gastar. Je

Saludos
  #9 (permalink)  
Antiguo 14/01/2008, 16:30
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: simplificar codigo ( de nuevo :P)

Si se coloca un string sin comillas PHP lo interpreta primero como si fuera una constante, y si no hay ninguna constante con ese nombre, PHP asume que se trata entonces de una cadena de texto no encapsulada. Eso es una causa muy común de error. Sin embargo no todo es lo que parece. Veamos un ejemplos con varios casos:

Código PHP:
define('palabra','constante');
 
$array['palabra'] = 'NO CONSTANTE';
$array['constante'] = 'CONSTANTE'
Ahora, si yo pongo:
Código PHP:
echo "Esto es de tipo ".$array[palabra]; 
Se imprime Esto es de tipo CONSTANTE, debido a que palabra es interpretado como una constante y reemplazado por su valor, por lo que en realidad estamos referenciando a $array['constante'];

Si coloco
Código PHP:
echo "Esto es de tipo ".$array['palabra']; 
Se imprime Esto es de tipo NO CONSTANTE, debido a que palabra es interpretado como un índice y reemplazado por su valor correspondiente dentro del array.

En caso de
Código PHP:
echo "Esto es de tipo $array[palabra]"
Imprime: Esto es de tipo NO CONSTANTE. Al estar toda la cadena entre comillas, no es necesario indicar que al poner palabra estamos haciendo referencia a un indice del array, y no a una constante

Esto
Código PHP:
echo "Esto es de tipo $array['palabra']"
Esto devuelve un error de sintaxis, ya que no es la forma de insertar un elemento de un array en un string directamente. Para eso se usa {}:

Pero si pongo esto:
Código PHP:
echo "Esto es de tipo {$array['palabra']}"
Ahora si, se imprime: Esto es de tipo NO CONSTANTE. PHP interpreta lo que está entre llaves {} como si estuviera fuera de la cadena. palabra es tomada como un índice.

Finalmente,
Código PHP:
echo "Esto es de tipo {$array[palabra]}"
Aquí, palabra es tomada como si fuera una constante, ya que se encuentra entre llaves, por lo que se imprime: Esto es de tipo CONSTANTE.

En resumen:

Código PHP:
 
$array
[palabra] = "{$array[palabra]}" "Esto es de tipo CONSTANTE"
$array['palabra'] = "$array[palabra]" "{$array['palabra']}" "Esto es de tipo NO CONSTANTE"
 
"$array['palabra']" 
No es válidoy devuelve error de sintaxis 
Un saludo,

Última edición por okram; 07/10/2008 a las 10:03
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 18:55.