यदि आपको यह पता लगाने की आवश्यकता है कि कौन से रिकॉर्ड एक मिलान लॉगआउट रिकॉर्ड के बिना लॉगिन का प्रतिनिधित्व करते हैं और इसके विपरीत, तो यह आपकी तालिका को एक अद्वितीय सत्र आईडी के साथ विस्तारित करने में सहायक होगा। एक कॉलम जोड़ें 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 द्वारा उल्लेख किया गया है, क्वेरी बहुत जटिल हो रही है और आप आवेदन पक्ष पर विश्लेषण पर विचार कर सकते हैं। क्योंकि मुझे लगता है कि लॉग टेबल बहुत बड़ी है, आपको भरोसा नहीं करना चाहिए कि आप स्मृति में सभी प्रविष्टियों को फिट करेंगे। आपको शायद किसी प्रकार की "स्लाइडिंग विंडो" तकनीक की आवश्यकता होगी।
चौथा विकल्प बेजोड़ लॉगआउट रिकॉर्ड को हटाना है। मेरे समाधान को एक अस्थायी तालिका की आवश्यकता है, इसलिए मैं यहां संपूर्ण (काफी लंबा) कोड पेस्ट नहीं करता, बस बेला ।