Foros del Web » Programando para Internet » PHP »

Duplicar Consulta para manejo de datos

Estas en el tema de Duplicar Consulta para manejo de datos en el foro de PHP en Foros del Web. Hola que tal, bueno lo que quiero hacer es muy facil, quiero duplicar una consulta del tipo Código PHP: $consulta = mysql_query ( "algo que ya tengo" ); ...
  #1 (permalink)  
Antiguo 05/07/2011, 17:57
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta Duplicar Consulta para manejo de datos

Hola que tal, bueno lo que quiero hacer es muy facil, quiero duplicar una consulta del tipo
Código PHP:
$consulta=mysql_query("algo que ya tengo");
/*aqui lo que intento es copiar $consulta, pero no se copia, solo hace referencia a $consulta */
$consulta2=$consulta
bueno espero que se entienda, lo busque por google pero no logro encontrar la solución (y no quiero hacer reiteradas consultas tampoco seria desperdiciar tiempo de ejecución).
Muchas gracias
  #2 (permalink)  
Antiguo 05/07/2011, 18:15
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duplicar Consulta para manejo de datos

y para que deseas pasarlo a otra variable? con una deberia de bastar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 05/07/2011, 18:19
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Duplicar Consulta para manejo de datos

¿Con que fin deseas realizar esta acción?
¿Para qué motivos?
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #4 (permalink)  
Antiguo 05/07/2011, 18:28
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

No quería dar motivos porque iba a ser mas largo, pero bueno, el objetivo de esto es poder ir buscando un ID de producto dentro de la consulta (tengo un while que va recorriendo ID por ID, y no están ordenados por ID, sino por nombre), para poder restar del stock si alguna persona hizo el alquiler de vajilla en una semana específica. Pongo algo del código que tengo, lo único que falta es eso y cuando quiero ir restando del stock solo se resta del primer producto, porque cuando termina el fetch_array ya se acaban las filas y no puedo seguir buscando ahí

Código PHP:
//Obtengo los dias tope
        
$lunes=date('Y-m-d',mktime(000$mes  $dia-$paralunes$anio));
        
$sabado=date('Y-m-d',mktime(000$mes  $dia+$parasabado$anio));
        
//Hago la consulta de la cantidad de productos por ID
        
$consultaprod=tep_db_query("
            SELECT op.products_id, SUM( op.products_quantity ) AS Acumulado
            FROM customers c, orders o, orders_products op
            WHERE c.customers_dob >= '"
.$lunes."'
            AND c.customers_dob <= '"
.$sabado."'
            AND c.customers_id = o.customers_id
            AND o.orders_id = op.orders_id
            GROUP BY op.products_id
        "
) or die("Problemas en el select:".mysql_error()); 
Lo que me importa de ahí es el Acumulado para restarlo, pero para eso necesito el ID

Código PHP:
if(!$haycliente){
                
$prod_list_contents .= '        <td align="right">' $listing['products_quantity'] . '</td>';
            }
            else{
                
$stocksemanal=$listing['products_quantity'];
                
//$encontrado=false;
                
$consultaprodb=$consultaprod;
                while (
$fila=tep_db_fetch_array($consultaprodb)){
                    if (
$fila['products_id']==$listing['products_id']) {
                        
$stocksemanal-=$fila['Acumulado'];
                    }
                }
                
                
$prod_list_contents .= '        <td align="right">' $stocksemanal '</td>';
            } 
El $stocksemanal es el que tengo que mostrar, por eso necesito duplicar la consulta para poder seguir buscando los ID que necesite nuevamente (ya que al último el fetch_array ya ni devuelve una fila, solo devuelve FALSE y no entra en el while). Por cierto el tep_db_query y el tep_db_fetch_array son funciones del oscommerce
  #5 (permalink)  
Antiguo 05/07/2011, 19:13
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duplicar Consulta para manejo de datos

empiezan mis preguntas te trae datos la consulta?? si no te trae datos deberias de empezar por ahi, luego que tengas los datos que es lo que deseas comparar?? porque entre tanto stock me perdi, ademas si duplicas la consulta estarias comparando la consulta con ella misma no?? aunque creo que tienes que explicar un poco mejor que es lo que deseas hacer para poderte ayudar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 05/07/2011, 19:30
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

Cita:
Iniciado por carlos_belisario Ver Mensaje
empiezan mis preguntas te trae datos la consulta?? si no te trae datos deberias de empezar por ahi, luego que tengas los datos que es lo que deseas comparar?? porque entre tanto stock me perdi, ademas si duplicas la consulta estarias comparando la consulta con ella misma no?? aunque creo que tienes que explicar un poco mejor que es lo que deseas hacer para poderte ayudar
Bueno respondo tus dudas. La consulta trae todos los datos que requiero, como dije, me funciona haciendo una consulta por cada producto que tengo, pero hacer tantas consultas (son 44 productos por ahora) me parece un poco exagerado. Lo que quiero hacer es que se duplique esas 44 veces (a mi parecer sería mas rápido). No quiero comparar consultas entre sí, lo que quiero comparar es el ID que tengo de un producto contra todas las filas del query(comparando los ID obviamente como en el código)
Código PHP:
if ($fila['products_id']==$listing['products_id']) 
.
Utilizando 1 sola consulta no me alcanza a menos que la duplique, porque cuando este while termine $consultaprod queda sin filas (quedando solo en FALSE)
Código PHP:
while ($fila=tep_db_fetch_array($consultaprodb)) 
En ese caso dice $consultaprodb porque pensé que se duplicaba haciendo $consultaprodb=$consultaprod , pero solo hace referencia a esta última.

Te dejo el código que SÍ me funciona, pero es engorroso en tiempo para mí

Código PHP:
if(!$haycliente){
                
$prod_list_contents .= '        <td align="right">' $listing['products_quantity'] . '</td>';
            }
            else{
                
$stocksemanal=$listing['products_quantity'];
                
//$encontrado=false;
                
$consultaprod=tep_db_query("
                    SELECT op.products_id, SUM( op.products_quantity ) AS Acumulado
                    FROM customers c, orders o, orders_products op
                    WHERE c.customers_dob >= '"
.$lunes."'
                    AND c.customers_dob <= '"
.$sabado."'
                    AND c.customers_id = o.customers_id
                    AND o.orders_id = op.orders_id
                    GROUP BY op.products_id
                "
) or die("Problemas en el select:".mysql_error());
                while (
$fila=tep_db_fetch_array($consultaprod)){
                    if (
$fila['products_id']==$listing['products_id']) {
                        
$stocksemanal-=$fila['Acumulado'];
                    }
                }
                
                
$prod_list_contents .= '        <td align="right">' $stocksemanal '</td>';
            } 
Gracias por tus respuestas

EDITO: Olvidé mencionar algo importante, todo el código de acá arriba está dentro de un while, por lo que las ID de $listing['products_id'] van cambiando hasta recorrer todos los productos
  #7 (permalink)  
Antiguo 05/07/2011, 20:01
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duplicar Consulta para manejo de datos

pues creo que tienes errados los conceptos, primero la consulta que estas haciendo es en una determinada fecha segun veo
Cita:
SELECT op.products_id, SUM( op.products_quantity ) AS Acumulado
FROM customers c, orders o, orders_products op
WHERE c.customers_dob >= '".$lunes."'
AND c.customers_dob <= '".$sabado."'
AND c.customers_id = o.customers_id
AND o.orders_id = op.orders_id
GROUP BY op.products_id
entonces luego hablas de comparar id, segundo, las id por el tipo de consulta no te van a dar nunca igual, ya que estas haciendo un group by, sencillamente te va a dar todas las diferentes id con la cantidad o lo que llamaste el acumulado, entonces vuelvo a preguntar que es lo que quires comparar, los productos son lo mismo?? o que
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 05/07/2011, 21:15
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

Claro necesito ese group by para tener todos los products_id diferentes, pero a su vez que se vayan sumando la cantidad pedida por cada usuario esa semana. Te pongo un ejemplo fácil.
Usuario 1 pidio 2 vasos para el 17/10/2011
Usuario 1 pidio 3 tenedores para el 17/10/2011
Usuario 2 pidio 1 vaso para el 18/10/2011

Entonces lo que yo debo hacer es, teniendo un stock (semi-fijo, solo cambia si no devuelven cosas) , debo sumar las cosas pedidas para la semana del 17 y 18 , entre el lunes y el sabado (de ahí vienen las variables, el 17 es lunes y el 22 sabado).
Entonces tengo que sumar los 2 vasos de Usuario 1 con el único vaso de Usuario 2. Suponiendo que el stock de vasos es 10, entonces para esa semana tendré disponibles solo 7 vasos (de ahí la variable $stocksemanal). y el stock disponible de tenedores para esa semana sería de 7(también suponiendo stock 10).

Ahora lo que debo hacer en PHP es mostrar ese stock semanal, entonces necesito el ID del primer producto que voy a mostrar (el vaso con ID 5 por ejemplo, y el ID lo obtengo de $listing['product_id']). Cuando haga la consulta, me va a dar 2 filas, una con el vaso ID 5 y Acumulado 3, y otra con el tenedor ID 6 y Acumulado 3 , por lo que necesito comparar el ID del producto del $listing(vaso) con el ID de todos los productos de la consulta hasta que las ID sean iguales y poder restar el "stock" con el Acumulado para encontrar el "stock semanal " y mostrarle al usuario. Y así sucesivamente con los 44 productos a mostrar. En caso de que no encuentre la ID, se muestra el stock sin modificaciones.

Última edición por CristhianUNSa; 05/07/2011 a las 21:44
  #9 (permalink)  
Antiguo 05/07/2011, 23:19
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

Bueno lo dejé como me funciona y es el código que puse mas arriba, si hay mas respuestas bienvenidas sean
  #10 (permalink)  
Antiguo 05/07/2011, 23:41
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Duplicar Consulta para manejo de datos

Leí muchas veces, pero no veo que es lo que realmente estas buscando hacer.

Estoy confundido.

En lugar de hablar de código cuentame que es lo que deseas hacer (no entres a código) solamente conceptos humanos y veremos si podemos ayudarte

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #11 (permalink)  
Antiguo 06/07/2011, 00:22
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

Bueno sin entrar a código y simple sería así. Quiero restar del stock (solo restar, sin modificar la base de datos) un número calculado (yo le llamo Acumulado a dicho número) a cada producto pedido. Pero quizá en los pedidos no van a estar todos los productos disponibles en alquiler, así que Para esto dispongo de la ID de cada uno de los productos que voy a mostrar, y la ID de los productos de los pedidos de varios clientes (la ID es única por producto, pero la cantidad pedida de ese producto se va acumulando en "Acumulado").
Al cliente tengo que mostrarle el Stock - Acumulado en pantalla. Así de simple
  #12 (permalink)  
Antiguo 06/07/2011, 09:43
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Duplicar Consulta para manejo de datos

Hola.

Ya entendi.

Mira el hacer 2 consultas de la forma que lo haces esta incorrecto.

Tu problema se puede solicionar con sesiones. Te explico


En la primer consulta SQL guardas en una sesion el numero de productos disponibles para alquiler:

Código PHP:
Ver original
  1.  
  2. $sql ="SELECT....................";
  3. $query = mysql_query($sql);
  4. ..
  5. $row = mysql_fetch_array($query)
  6. ...
  7. ...
  8. .
  9.  
  10. $_SESSION['numProductos_disponibles'] = $row['numero_productos'];


De esta manera guardas en una sesion el numero de productos que se pueden alquilar de un producto.

Mediante una programacion lógica-matematica en PHP (me refiero a condicionales, sumas y restas) puedes validar que el usuario no seleccione mas productos tomando como limite el valor de ésta sesion.


Hay un monton de formas de evitar esto, te pongo un ejemplo.

Supongamos que en la fila de cada producto colocas un boton de formulario con name="add" que cada vez que se precione se haga un incremento para dicho producto:

Código PHP:
Ver original
  1. <?php
  2. i=0;
  3. if(isset($_POST['add'])){
  4.  
  5.  
  6.     i++;
  7.    
  8.     if(  i> $_SESSION['numProductos_disponibles'] ){
  9.  
  10.                      echo "No hay mas productos que puedas alquilar";
  11.  
  12.      } else {
  13.  
  14.               ++i; //El valor de está variable la puedes mostrar en patalla, contiene el numero de productos que se han añadido al stock
  15.              
  16.  
  17.      }
  18.  
  19.  
  20.  
  21. }
  22.  
  23. ?>


Y ahora para mantener sincronizado este "numero de productos" disponible entre todos los usuarios que esten en ese momento utilizando el mismo producto (una cuestion que se puede llegar a dar mas de 1 vez) puedes utilizar un lenguaje asincronico, El mas sencillito es AJAX.

Bueno, espero se hayan aclarado las dudas un saludo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #13 (permalink)  
Antiguo 09/07/2011, 14:59
 
Fecha de Ingreso: junio-2011
Mensajes: 23
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Duplicar Consulta para manejo de datos

Gracias, ya presenté el trabajo y quedó bien

Etiquetas: duplicar, manejo
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 23:47.