Nueva pregunta

Pregunta:

Fecha: 25-02-2020 04:43:46 (En Español)

Duplicado en query enviada a la base[No resuelta]

Hola,

Tengo una consulta ya que un cliente tiene un problema con un código que les he hecho, el problema no es siempre y es generalmente con un usuario de cuatro que hay usando el código.
Es medio complicado pero trataré de darme a entender, resulta que el código es de un inventario y ellos generan ventas por cada cliente... puede ser la venta a insertar a la BD por un producto como por 10 productos (dependiendo de lo que lleve el cliente), en el día cada usuario genera al menos 150 inserts a la tabla de la BD, pero este usuario llamemole usuario A, en el día entre sus al menos 150 ventas(150 productos) genera al menos un articulo repetido ... esto se repite cada día como máximo 2 a 3 veces

O sea, de las 150 INSERT que hace a la tabla llamemola PRODUCTO, este usuario A, genera como máximo 3 productos repetidos.

Por ejemplo, llega un cliente y pide 5 productos diferentes, viene A y genera la factura y guarda.. hasta ahi todo bien, le cobra y el cliente se fue contento. Pero luego va a chequear la lista de productos vendidos y entre los 5 productos diferentes hay uno que está repetido en la tabla. Esto no sucede siempre y sólo le sucede al usuario A de 4 que hay usando a la vez el código. Este código cabe mencionar lo están usando varios lugares que les doy servicio y solamente en este lugar sucede eso.

Les mando a continuación parte del código.

        $sql = "INSERT INTO PRODUCTO (id, cod, nombreProd, vendido, ........."//entre otros )
	VALUES ";
	$insertQuery = array();
	$insertData = array();
	foreach ($_POST['cod'] as $i => $cod) {
                $insertQuery[] = '(?, ?, ?, ?,  ........... )';
	        $insertData[] = $_POST['id'][$i] == '' ? null : $_POST['id'][$i];
		$insertData[] = $_POST['cod'][$i];
		$insertData[] = $_POST['nombreProd'][$i];
		$insertData[] = $_POST['venta'][$i];
                //........
	}


Espero me puedan ayudar, lo que quiero en sí es ver de que manera se pueda chequear la query antes de INSERTAR a la tabla para ver si en la query vienen duplicados y si hay cuando haga el INSERT ignorarlo y continuar.

En la tabla si me entendieron queda registro de todos los productos vendidos, por lo que INSERT IGNORE no me funciona ya que el hace un barrido en la tabla para ver si ya existe X producto de la query y si existe lo ignora, en este caso esta tabla almacena todo. ¿Abra una forma de hacer esto?
Etiquetas: Base de Datos - Javascript - MySQL - PHP Votos: 0 - Respuestas: 6 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 25-02-2020 05:31:43 Hola Joaquin, en mi opinión la descripción de tu problema es un poco confusa. Pero te recomiendo recurrir a la vieja confiable, que es imprimir los querys antes de ejecutarlos y poder determinar donde se esta la falla, otra opción que puedes evaluar, es agregar una llave compuesta en tu tabla, para evitar la duplicidad en los registros que se insertan en BD. Saludos!!   Votos: 0 - Link respuesta
     
  • Fecha: 25-02-2020 06:05:51 Gracias por tu idea JLuis Castillo, efectivamente es algo confusa y lo más raro que entre todos los usuarios que usan dicho script solamente a uno le sucede eso y no es siempre, sino una o dos veces al día...bien raro.
    Fíjate que no puedo generar una key unique o similar en esa tabla ya que en ella se guardan todos los productos vendidos, o sea que entre los 150,000 aprox que lleva almacenados se encuentran miles de productos idénticos, porque ahí se guardan los registros de todas las compras y ventas.
    Luego al querer ver la factura por ejemplo 002345 para imprimirla, el fpdf llama dentro de la tabla a todos los productos que tengan el id de referencia 002345, fue así que el cliente se fijó que iba un producto repetido y que al sumarlo no generaba ese incremento a dicho total y que el usuario A sólo había vendido 1 y no dos...
      Votos: 0 - Link respuesta
     
  • Fecha: 26-02-2020 07:21:17 Buen día, yo iniciaría el análisis por los siguientes puntos

    - ¿Siempre se repite el mismo producto? de ser así revisar si está repetido el producto en alguna tabla a la que se hace referencia
    - Intentar replicar la misma venta con los otros usuarios
    - Intentar replicar la venta con el usuario del problema y ver si vuelve a pasar
    - ¿Ya descartaste que no es problema de usuario? es decir ¿estas seguro que el usuario no lo registro 2 veces? si se registran las horas en el momento de agregar el producto puedes revisar las horas, si es la misma hora si es duplicidad si es diferente hora por lo menos de un segundo es otro registro del mismo producto

    Espero esto te ayude.
      Votos: 0 - Link respuesta
     
  • Fecha: 26-02-2020 10:49:58 Hola Ruben Osornio, gracias por tus recomendaciones.

    Fíjate que efectivamente ya revisé en la tabla de referencia y no está repetido, sólo con ese usuario sucede eso, efectivamente se ha realizado con otros usuarios y no vuelve a replicar(Es más el usuario se cambio de maquina, se elimino el usuario y se creó otro y al día siguiente sucedió nuevamente). El cliente dueño dice que efectivamente cuando sucede solamente una vez está listado el producto que ha sido repetido y no sólo es uno en específico, ha sucedido ya con unos 20. La hora si es algo corto el lapso... generalmente sucede entre las 11:30 am a 2 pm.

    Realmente me tiene confundido, ya que si fuese error de código sucedería con todos los usuarios y en todas las ventas... y según dice el cliente él a visto y además al cliente le a visto la bolsa de lo comprado y no tiene producto de más...

    Por eso me preguntaba si existe una forma de revisar el array que manda el formulario y si ve que hay repetido un producto, simplemente lo ignore y pase al siguiente...
      Votos: 0 - Link respuesta
     
  • Fecha: 26-02-2020 11:38:35 Te aconsejo crear logs por ejemplo laravel y CpdeIgniter guardan logs puedes mandar a guardar los inserts para que cuando vuelva a ocurrir revises el log y veas que se mandó en el insert, también puedes crear tu log aunque no uses frameworks o puedes hacer una tabla donde guardes la cadena del insert para que puedas revisar que lleva el insert, yo aplicaría eso.   Votos: 0 - Link respuesta
     
  • Fecha: 27-02-2020 05:44:47 Yo tuve un problema parecido en cierta ocasión y era porque un usuario al enviar la información en un formulario que luego de llenarse queda vacío para permitir un segundo envío (con nuevos datos) a veces recargaba la página del formulario, provocando que se duplicara la misma. Debías sentarte con el usuario para ver que es lo que hace cuando trabaja en ese formulario.   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com