सबसे पहले, यह क्वेरी है जो "प्लेयर इतिहास" बनाता है जिसे आप जितनी बार चाहें निष्पादित किया जा सकता है और यह केवल नया इतिहास बनायेगा यदि कल के लिए कोई इतिहास पंक्ति नहीं है या अतीत में नवीनतम इतिहास प्रविष्टि के बाद मूल्य बदल गए हैं तो खिलाड़ियों के लिए पंक्तियां।MySQL विशेषज्ञ: x दिनों से पुरानी सभी पंक्तियों को हटाएं लेकिन नवीनतम
INSERT INTO `player_history` (`player_id`, `date`, `races`, `maps`, `playtime`, `points`)
SELECT `p`.`id`, DATE_SUB(NOW(), INTERVAL 1 DAY), `p`.`races`, `p`.`maps`, `p`.`playtime`, `p`.`points`
FROM `player` `p`
WHERE `p`.`playtime` IS NOT NULL
AND `p`.`playtime` > 0
AND (
SELECT `player_id`
FROM `player_history`^
WHERE `player_id` = `p`.`id`
AND (
`date` = DATE_SUB(NOW(), INTERVAL 1 DAY)
OR (
`date` < DATE_SUB(NOW(), INTERVAL 1 DAY)
AND `races` = `p`.`races`
AND `points` = `p`.`points`
AND `maps` = `p`.`maps`
AND `playtime` = `p`.`playtime`
)
)
ORDER BY `date` DESC
LIMIT 1
) IS NULL;
अब समस्या मैं भी एक ही क्वेरी का उपयोग कर इतिहास तालिका सफाई करना चाहते हैं। यह पहले से ही 10 दिनों से अधिक पुरानी सभी इतिहास प्रविष्टियों का चयन करता है लेकिन नवीनतम। लेकिन मैं सिर्फ चयन * के बजाय DELETE करना पसंद नहीं कर सकता।
SELECT *
FROM `player_history` `ph`
WHERE `date` < DATE_SUB(NOW(), INTERVAL 10 DAY)
AND `date` != (SELECT `date`
FROM `player_history`
WHERE `player_id` = `ph`.`player_id`
ORDER BY `date` DESC
LIMIT 1);
तो क्या मैं एक ही डिलीट क्वेरी का उपयोग करने के लिए एक तरीका है?