2010-07-13 16 views
7

सभी को नमस्कार। यहाँ नौसिखिया। मेरे सरल वेब फॉर्म में डुप्लिकेट प्रविष्टि को रोकने पर प्रश्न।MySQL तालिका में अनन्य कुंजी बनाना

मेरी तालिका एक वेब फॉर्म से उपयोगकर्ता इनपुट रिकॉर्ड करती है, और तिथि से अलग है उदा। तारीख()। एक ही नाम के साथ उपयोगकर्ता को एक ही तारीख में दो बार जानकारी दर्ज करने के लिए कैसे रोकें, उदा। एक ही उपयोगकर्ता नाम एक ही तारीख में दो बार दर्ज नहीं किया जा सकता है, लेकिन दूसरी तारीख में दर्ज किया जा सकता है?

आशा है कि कोई मुझे इस पर सलाह दे सकता है। धन्यवाद अग्रिम है।

उत्तर

9

आपका तालिका इन होना चाहिए:

create table tablename (
... 
user_id bigint, -- or whatever 
date_created date, 
unique key(user_id, date_created) 
... 
); 
+0

सभी सलाहों के लिए धन्यवाद :) सुझाए गए अनुसार प्रयास किया गया है, यह उसी तारीख से उसी प्रविष्टि को रोक देगा। लेकिन जब मैं तिथि को अगली तारीख में बदलता हूं, तो यह रिकॉर्ड दर्ज करने में असमर्थ 'डुप्लिकेट नाम' दिखाएगा। उसी NAME को अन्य DATE को फिर से कैसे दर्ज किया जा सकता है? – cys

+0

शायद आपके पास अकेले नाम पर एक अनूठी कुंजी भी है? कृपया इसे चलाएं: 'तालिका टैबलेटनाम बनाएं' दिखाएं और परिणाम पोस्ट करें। – ceteras

+0

धन्यवाद दोस्तों, मैं इसे चलाने के लिए प्रबंधन करता हूं। अगर मैं DATE और NAME के ​​साथ पंक्ति में से किसी एक पंक्ति को मान्य करता हूं, तो रिकॉर्ड दर्ज करें, फिर रिकॉर्ड दर्ज करें। मुझे यह सब आप से मिला है जो NAME और DATE को अद्वितीय बना रहा है। धन्यवाद! :) – cys

1

आप सरल एक समग्र प्राथमिक कुंजी बना सकते हैं पर एक अद्वितीय कुंजी बनाएँ। आपके मामले के लिए इसका मतलब है कि आपकी प्राथमिक कुंजी में दिनांक फ़ील्ड के साथ-साथ उपयोगकर्ता नाम फ़ील्ड होना चाहिए।

+1

यह भी संभव है। लेकिन इस तालिका के साथ संबंध बनाते समय समग्र पीके समस्याग्रस्त हैं। मुझे लगता है कि अद्वितीय सूचकांक बेहतर दृष्टिकोण है। –

+0

मैं सहमत हूं! हालांकि, मैं सिर्फ यह टिप्पणी करना चाहता हूं कि अद्वितीय फ़ील्ड के लिए "नॉट न्यूल" विकल्प आवश्यक है (जैसा कि आपने अपनी तालिका निर्माण कोड में किया था), क्योंकि नाम या दिनांक के लिए एक पूर्ण मूल्य विशिष्टता को नष्ट कर देता है (यानी यह जोड़ना संभव है यदि उपयोगकर्ता शून्य है तो उपयोगकर्ता 'xxx' कई बार)। – Javaguru

1

कई मायनों में।

सबसे पहले, आप अपनी तालिका में इंडेक्स बना सकते हैं। (मैं एक उदाहरण के रूप में सरल तालिका का उपयोग कर रहा हूँ)।

CREATE TABLE `test` (
`id` INT NOT NULL , 
`name` VARCHAR(255) NOT NULL , 
`date` DATE NOT NULL , 
PRIMARY KEY (`id`) 
) ENGINE = MYISAM; 

ALTER TABLE `test` ADD UNIQUE (
`name` , 
`date` 
); 

यह MySQL तरीका है।

आपको PHP में भी चेक करना चाहिए, हालांकि आप इसे डालने के दौरान कर सकते हैं (MySQL त्रुटि लौटाएगा और आप इसे देख सकते हैं)। लेकिन आप डालने से पहले अतिरिक्त चयन कर सकते हैं (SELECT * from test WHERE name=USER AND date=DATE) और रिकॉर्ड गिनती की जांच करें। यदि यह 0 से अधिक है, तो आप त्रुटि दिखाते हैं।

सहेजते समय, आपको शायद ही कभी एक अतिरिक्त एसक्यूएल के बारे में चिंता करनी चाहिए। यदि आपको करना चाहिए, तो त्रुटियों के लिए MySQL कथन जांचें (MySQL तरीका :))।

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