Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

masukkan atau hilangkan entri dalam kueri mysql berdasarkan kondisi hasil

Jika Anda perlu mendeteksi catatan mana yang mewakili login tanpa catatan logout yang cocok dan sebaliknya, akan sangat membantu jika Anda memperluas tabel Anda dengan ID sesi yang unik. Tambahkan kolom session_id , hasilkan nilainya saat login, ingat di sesi dan masukkan nilai yang sama ke session_id untuk kesalahan logout. Ini akan sangat menyederhanakan kueri.

Jika Anda memerlukan kueri yang akan menambahkan catatan login yang hilang, coba yang berikut ini:

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 .) Anda dapat menyisipkan hasilnya ke tabel (INSERT INTO logs (...) SELECT ... ) atau tambahkan kueri ke UNION dalam kueri asli Anda.

Seperti yang dicatat oleh @OlivierCoilland, kueri menjadi sangat kompleks dan Anda dapat mempertimbangkan analisis di sisi aplikasi. Karena saya kira tabel log cukup besar, Anda tidak harus mengandalkan Anda akan memasukkan semua entri dalam memori. Anda mungkin memerlukan semacam teknik "jendela geser".

Opsi keempat adalah menghapus catatan logout yang tidak cocok. Solusi saya membutuhkan tabel sementara, jadi saya tidak menempelkan seluruh (cukup panjang) kode di sini, lihat saja biola .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Query MySQL tidak valid:Tingkat nesting yang terlalu tinggi untuk dipilih

  2. Menggunakan MySql dengan Entity Framework 4 dan Code-First Development CTP

  3. kesalahan fpdf dan kesalahan tampilan tabel

  4. Perbedaan antara MySql dan MySqli di PHP

  5. permintaan lambat mysql