2013-02-10 42 views
12

मैं निम्न तालिका संरचना है:पंक्ति मौजूद है तो एक MySQL तालिका को अद्यतन करने का सबसे तेज़ तरीका है। अधिक से अधिक 2 गैर-अद्वितीय कुंजी

$checkq = mysql_query("SELECT count(*) as rowexist FROM reports WHERE day='$day' AND uid='$uid' AND siteid='$sid' AND cid='$cid'") or die(mysql_error()); 
$checkr = mysql_fetch_array($checkq); 

if ($checkr['rowexist'] > 0) { 
mysql_query("UPDATE reports_adv SET visits=visits+1 WHERE day='$day' AND uid='$uid' AND siteid='$sid' AND cid='$cid'"); 
} else { 
mysql_query("INSERT INTO reports_adv SET day='$day', uid='$uid', siteid='$sid', cid='$cid', visits='1'"); 
} 

इस MySQL अद्यतन करने के लिए एक सबसे तेज़ तरीका है:

CREATE TABLE IF NOT EXISTS `reports` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `day` int(11) NOT NULL, 
    `uid` int(11) NOT NULL, 
    `siteid` int(11) NOT NULL, 
    `cid` int(3) NOT NULL, 
    `visits` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) 
वर्तमान में मैं जाँच & सम्मिलित/निम्नलिखित स्निपेट के साथ अद्यतन

तालिका यदि पंक्ति मौजूद है तो 2 से अधिक गैर-अद्वितीय कुंजी के साथ सम्मिलित है?

उत्तर

17

बस का उपयोग INSERT...ON DUPLICATE KEY UPDATE

INSERT INTO reports_adv (day, uid, siteid, cid, visits) 
VALUES ('$day', '$uid', '$sid', '$cid', 1) 
ON DUPLICATE KEY UPDATE visits=visits+1; 

लेकिन कुछ और करने से पहले, आप एक UNIQUE बाधा स्तंभों पर परिभाषित करना चाहिए।

ALTER TABLE reports_adv ADD CONSTRAINT tb_uq UNIQUE (day, uid, siteid, cid) 
+0

बहुत बहुत धन्यवाद। बहुत अच्छा काम करता है। – dracosu

+0

आपका स्वागत है ': डी' –

+0

एक और सवाल। जब मैं डेटा प्रदर्शित करता हूं तो मैं WHERE दिन, यूआईडी, साइटिड और सीड पर उपयोग करता हूं। मुझे क्या इंडेक्स जोड़ना चाहिए? – dracosu