Mysql
 sql >> база данни >  >> RDS >> Mysql

вмъкване или пропускане на записи в mysql заявка въз основа на условията на резултатите

Ако трябва да откриете кои записи представляват влизане без съвпадащ запис за излизане и обратно, тогава би било полезно да разширите таблиците си с уникален идентификатор на сесията. Добавете колона session_id , генерирайте стойността му при влизане, запомнете го в сесията и поставете същата стойност в session_id за грешка при излизане. Това би опростило много заявките.

Ако имате нужда от заявка, която би добавила липсващи записи за вход, опитайте следното:

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

(Fiddle .) Можете или да вмъкнете резултата в таблицата (INSERT INTO logs (...) SELECT ... ) или добавете заявката към UNION в първоначалната си заявка.

Както отбелязва @OlivierCoilland, заявката става доста сложна и можете да помислите за анализ от страна на приложението. Тъй като предполагам, че таблицата на журнала е доста голяма, не трябва да разчитате, че ще поберете всички записи в паметта. Вероятно ще ви трябва някаква техника на "плъзгащ се прозорец".

Четвъртата опция е изтриване на несравними записи за излизане. Моето решение се нуждае от временна таблица, така че не поставям целия (доста дълъг) код тук, просто вижте цигулка .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка:Неочаквано изключване на MySQL. Докато се опитвате да стартирате Mysql на Xampp

  2. bbPress:Как да намерите съпоставяния на прикачени файлове към съответните им публикации

  3. Преброяване на броя на извършените заявки

  4. Вземете цялата Дата на месеца заедно с данните от таблицата

  5. MySQL Бавен при присъединяване. Всеки начин да се ускори