sql >> Base de Datos >  >> RDS >> Mysql

insertar u omitir entradas en la consulta mysql según las condiciones de los resultados

Si necesita detectar qué registros representan un inicio de sesión sin un registro de cierre de sesión coincidente y viceversa, sería útil ampliar sus tablas con un ID de sesión único. Agregue una columna session_id , genere su valor al iniciar sesión, recuérdelo en la sesión y coloque el mismo valor en session_id por el error de cierre de sesión. Simplificaría mucho las consultas.

Si necesita una consulta que agregue registros de inicio de sesión faltantes, intente lo siguiente:

SELECT 0 AS idLoginnLog, l1.username, ADDTIME(l1.time, '-0:30:0') AS time, 1 AS type
FROM logs AS l1
  LEFT JOIN logs AS l2
  ON (l1.username=l2.username AND l2.type=1 AND l2.time BETWEEN ADDTIME(l1.time, '-0:30:0') AND l1.time)
WHERE
  l1.type=0
  AND l2.idLoginLog IS NULL

(Violín .) Puede insertar el resultado en la tabla (INSERT INTO logs (...) SELECT ... ) o agregue la consulta a UNION en su consulta original.

Como señaló @OlivierCoilland, la consulta se está volviendo bastante compleja y puede considerar el análisis en el lado de la aplicación. Debido a que supongo que la tabla de registro es bastante grande, no debe confiar en que caben todas las entradas en la memoria. Probablemente necesite algún tipo de técnica de "ventana deslizante".

La cuarta opción es eliminar registros de cierre de sesión no coincidentes. Mi solución necesita una tabla temporal, así que no pego el código completo (bastante largo) aquí, solo veo el violín .