mysql
2013-03-08 8 views 5 likes 
5

लर्निंग MySQL और सवालों का होने बवासीर ...MySQL: यदि पंक्ति मौजूद नहीं है, तो सम्मिलित करें, अन्यथा .. क्या कोई आसान आदेश है?

मैं सरल द्वारा वांछित प्रभाव प्राप्त कर सकते हैं:

$mysqli->query("INSERT results SET user_id = '".$user_data[0]['user_id']."', logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."'"); 
$mysqli->query("UPDATE results SET result_tries = result_tries +1 WHERE logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."' AND user_id = '".$user_data[0]['user_id']."'"); 

मैं मेज पर डीबी unique check है, ताकि logo_id और user_id अद्वितीय होना चाहिए। तो यदि पंक्ति मौजूद है तो पहली क्वेरी विफल हो जाती है, और दूसरा अपडेट निष्पादित किया जाता है ..., लेकिन यह हैक की तरह लगता है ... क्या ऐसा करने का कोई बेहतर तरीका है?

+0

कृपया स्टैक ओवरफ़्लो पर (http://stackoverflow.com/questions/6030071/mysql-table-insert-if-not-exist-otherwise-update) देखें। – shola

+0

http://stackoverflow.com/questions/5557479/mysql-update-if-exists-else-insert का संभावित डुप्लिकेट –

उत्तर

8

$user_id = $user_data[0]['user_id']; 
$logo_id = $mysqli->real_escape_string($_GET['logo_id']); 

$sql = "INSERT INTO results (user_id, logo_id, result_tries) 
     VALUES ('$user_id', '$logo_id', 0) 
      ON DUPLICATE KEY UPDATE result_tries = result_tries + 1"; 

$mysqli->query($sql); 
0

यह सबसे सुरुचिपूर्ण समाधान मैं आ गए है के बाद से मैं किसी भी अद्वितीय सूचकांक स्तंभ की जरूरत नहीं है और व्यवस्था में जहां खंड का उपयोग करने के अपने लक्ष्य को प्राप्त करने की आवश्यकता का प्रयास करें:

DELETE FROM assignment_status WHERE assignment_id = 114 AND user_id = 1; 
INSERT INTO assignment_status (assignment_id, user_id, status, note) VALUES (114, 1, 2, "Some useful information goes here..."); 

इस Stack Overflow thread के लिए धन्यवाद (वहां स्पष्टीकरण भी ढूंढें)।

संबंधित मुद्दे