Foros del Web » Programando para Internet » PHP »

Duda con optimización de consulta

Estas en el tema de Duda con optimización de consulta en el foro de PHP en Foros del Web. Hola! Estoy haciendo una web de "rifas", donde el usuario selecciona un numero de la rifa... y pues al final el que haya elegido el ...
  #1 (permalink)  
Antiguo 05/01/2016, 09:49
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Duda con optimización de consulta

Hola!

Estoy haciendo una web de "rifas", donde el usuario selecciona un numero de la rifa... y pues al final el que haya elegido el numero ganador se lleva el premio.

Asi es como se veria la rifa sin ningun numero reservado:



El codigo de lo anterior es sencillo:

Código PHP:
<?php
                                    
//Muestro los slots
                                    
for($slot=1;$slot<=$row['numeros'];$slot++) {
                                        
                                        
?>
                                        <div style="background-color: #5cb85c; 
                                        height: 50px; width:50px; background-size: 100%; text-align: center; 
                                        border: 1px solid black; float: left; padding-top: 14px;margin-bottom: 6px; margin-right: 3px; margin-left: 3px;">
                                        <?php echo $slot?>
                                        </div>
                                        <?php
                                    
}
                                    
?>
                                    
</div>
Ahora viene donde tengo la duda!

En el bucle for, tengo que ir comprobando si el numero esta reservado ya o no.
Lo primero que se me ocurre es ir haciendo una consulta SQL a la taba de "numeros_reservados" para ver si ese slot esta ya seleccionado o no. Esto supondria hacer un consulta SQL en cada vuelta del for... lo que para el cuadrante del ejemplo serian 100 consultas SQL...

Espero que me hayan entendido.

Lo que no se, es si esta es la mejor forma de hacer lo que quiero... ya que son muchas consultas SQL y tengo miedo que penalize el rendimiento...

Otra opcion que se me ocurre, es sacar en una sola consulta SQL todos los numeros reservados, y guardarlos en un array o una variable... y despues en cada vuelta del bucle for ir consultando si el numero esta en este array o variable.

¿Que me recomiendan?
¿Alguna otra idea para realizar lo que quiero?
¿penaliza mas al rendimiento de la web las consultas SQL o las consultas al Array o variable?

Gracias de antemano
__________________
Follow me on twitter @franbedia
  #2 (permalink)  
Antiguo 05/01/2016, 10:06
 
Fecha de Ingreso: enero-2006
Mensajes: 14
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Duda con optimización de consulta

no tengo claro haberte entendido,

yo entiendo esto: vas a hacer una tabla (aunque sean DIV), donde muestras los numeros a elegir, y cuando el usuario lo elije lo introduces en la DB...

pero no se puede repetir el numero que ya haya elegido otro usuario.

si es así, (me queda la duda de como eligen el numero y el control de los usuarios, pero entiendo que lo tienes controlado), se me ocurren dos opciones, la mas basica, muestra solo loes numeros disponibles, o la otra, haz que los numeros se elijan mediante un link en él, y los numeros que no se pueden no tengan el link (y si otro color mejor). Con un simple IF lo tienes...

si no es esto, pues nada

y si es, espero que te sirva la idea
  #3 (permalink)  
Antiguo 05/01/2016, 10:34
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: Duda con optimización de consulta

Vaya.. quizas me he explicado un poco mal, lo siento.
Voy a tratar de explicarlo de otra forma mas simple y clara.

Supón que tienes la siguiente tabla en base de datos:

Cita:
TABLA_NUMEROS_RESERVADOS
__________________________

id_sorteo
id_usuario
numero_reservado
Supón ahora que tienes un bucle for que va desde el numero 1 hasta el 100... y tienes que comprobar si estos números están ya reservados o no.

Lo que hago actualmente es hacer una consulta a la base de datos para ver si ese numero esta reservado por algun usuario:

SELECT id_usuario FROM tabla_numeros_reservados WHERE numero_reservado=$num AND id_sorteo=$sorteo

En caso de que esa consulta exista... muestro la foto del usuario
En caso de que esa consulta no exista... lo marco como "disponible"

Esto supone hacer esta consulta 100 veces (una por cada numero del sorteo)

Mi duda es si hay alguna forma de hacer mejor esto... o como lo hago esta bien.

Si quereis ver un ejemplo de lo que comento, podeis entrar a esta seccion http://csgo.com.es/foro/index.php?action=rifas y pulsar sobre "Ver rifa"



Actualmente el rendimiento es bueno... las imagenes y los slots cargan bien.

Sin embargo, estoy preparando una segunda version de ese sistema de sorteos... en donde puede haber mas de 100 números por sorteo...
Imagina un sorteo para 500 usuarios... en donde se harian 500 consultas SQL!

Asi que mi duda es como harian esto ustedes
__________________
Follow me on twitter @franbedia
  #4 (permalink)  
Antiguo 05/01/2016, 16:34
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Duda con optimización de consulta

Pues si tienes 500 slots para la rifa, tendrán que mostrarlos sí o sí, a ver si logro explicarme.

1.- Primero haces tu consulta general a la BD.
2.- Después, con un while vas recorriendo CADA UNO de los numeros de los slots (vacios u ocupados) en esa rifa, y dentro de ese while vas preguntando si el número ya esta ocupado o no. Si lo está, que seleccione la foto del usuario, y si no que simplemente coloque el id del slot.

No le veo mucha ciencia

Última edición por rodocoyote15; 05/01/2016 a las 16:42

Etiquetas: optimización, sql, variable
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 17:07.