मैं एक साधारण फ़ंक्शन बनाउंगा:
DELIMITER $$
DROP FUNCTION IF EXISTS `mydb`.`updateMytable`$$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION `mydb`.`updateMytable`() RETURNS TEXT
BEGIN
SET @updated := '';
UPDATE mytable
SET viewed = 1
WHERE viewed = 0
AND (
SELECT @updated := CONCAT_WS(',', @updated, id)
) != ''
;
RETURN TRIM(LEADING ',' FROM @updated);
END$$
DELIMITER ;
जो तालिकाओं को अद्यतन करता है और संयोजित आईडी लौटाता है।
PHP से आप इसे कहते हैं:
SELECT mydb.updateMytable()
और आप एक हलचल में आईडी प्राप्त करते हैं:1,2,7,54,132
आदि...
अपडेट करें:
मेरा फ़ंक्शन अल्पविराम से अलग आईडी युक्त स्ट्रिंग लौटा रहा है:'1,5,7,52,...'
ये आईडी केवल वही हैं जिन्हें फंक्शन कॉल के दौरान अपडेट किया गया होता,
बेहतर php-mysql उदाहरण होगा (आप पीडीओ का उपयोग कर सकते हैं और करेंगे):
$query = "SELECT mydb.updateMytable()";
$res = mysql_query($query);
$arr = mysql_fetch_array($res);
$ids = explode(',', $arr[0]);
// now you can do whatever you want to do with ids
foreach ($ids as $id)
{
echo "Hoorah: updated $id\n";
}
mydb
को बदलना भी याद रखें और mytable
आपके डेटाबेस नामों के अनुसार
अंतिम
क्योंकि आपको अधिक जटिल कार्यक्षमता की आवश्यकता है, बस दो क्वेरी चलाएँ:
पहला रन:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
अगला रन:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0