MySQL में किसी विशिष्ट यूज़र के लॉगिन समय को अपडेट करने के लिए, UPDATE स्टेटमेंट के साथ WHERE क्लॉज़ का उपयोग करें। यदि एक ही यूज़र के एकाधिक रिकॉर्ड हैं, तो ORDER BY ... LIMIT 1 से नवीनतम रिकॉर्ड अपडेट करें।
उदाहरण: Carol का लॉगिन समय अपडेट करना
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1911 (
UserId INT,
UserLoggedInTime TIME,
UserName VARCHAR(20)
);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1911 VALUES (100, '07:32:00', 'Chris'), (101, '05:00:00', 'David'), (102, '06:10:20', 'Mike'), (103, '03:55:00', 'Carol');
अपडेट से पहले:
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 03:55:00 | Carol | +--------+------------------+----------+
Carol का लॉगिन समय अपडेट करें (नवीनतम रिकॉर्ड):
mysql> UPDATE DemoTable1911 SET UserLoggedInTime = '12:30:45' WHERE UserName = 'Carol' ORDER BY UserId DESC LIMIT 1;
अपडेट के बाद:
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 12:30:45 | Carol | +--------+------------------+----------+
ORDER BY ... LIMIT 1 क्यों?
- यदि एक ही यूज़र के एकाधिक लॉगिन रिकॉर्ड हैं
ORDER BY UserId DESCनवीनतम रिकॉर्ड पहले लाता हैLIMIT 1केवल पहली (नवीनतम) पंक्ति अपडेट करता है- बिना इसके, उस यूज़र के सभी रिकॉर्ड अपडेट हो जाएंगे
बेहतर स्कीमा डिज़ाइन
उत्पादन के लिए, अलग लॉग टेबल बेहतर है:
CREATE TABLE user_logins (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP,
logout_time DATETIME NULL,
INDEX idx_user_time (user_id, login_time)
);
तब नवीनतम लॉगिन अपडेट करने के लिए:
UPDATE user_logins SET logout_time = NOW() WHERE user_id = 103 AND logout_time IS NULL ORDER BY login_time DESC LIMIT 1;
सुरक्षा नोट
एप्लिकेशन कोड में हमेशा पैरामीटराइज़्ड क्वेरी (PreparedStatement) उपयोग करें SQL इंजेक्शन रोकने के लिए।