2012-11-12 26 views
6

मुझे डीबी क्षेत्र में समय अवधि स्टोर करने के लिए एक विधि की आवश्यकता है। मैं एक ऐसी वेबसाइट तैयार कर रहा हूं जहां ग्राहकों को यह चुनने में सक्षम होना चाहिए कि वे किसी विशेष प्रारंभ तिथि से कितनी देर तक विज्ञापन प्रदर्शित करना चाहते हैं।टाइम रेंज की तुलना में एक MySQL में समय अवधि संग्रहीत करने का सबसे अच्छा तरीका क्या है?

मैंने TIME का उपयोग करने के बारे में सोचा था, लेकिन इसमें अधिकतम '838: 59: 59' है जो लगभग 34 दिनों में काम करता है। यह संभव है कि एक ग्राहक एक विज्ञापन चाहते हैं कि उससे अधिक समय तक अस्तित्व में रहें।

तो इससे निपटने का सबसे अच्छा तरीका क्या होगा? बस एक बहुत बड़ा INT?

+0

दो स्तंभों में रिकॉर्ड शुरू और समाप्ति समय क्यों नहीं? – eggyal

+0

यह मेरी मूल योजना थी, लेकिन वेबसाइट के अन्य पहलुओं को समझने की कोशिश करते समय बल्कि भ्रमित साबित हुई, इस अवधि को संग्रहित करना मुझे क्लीनर माना जाएगा। – cosmicsafari

+0

और आप अपनी अवधि किस इकाई को स्टोर करेंगे? सेकंड? मिनट? दिन? जो डेटा प्रकार – mwangi

उत्तर

6

यदि आप प्रारंभ समय के लिए कॉलम रखना चाहते हैं और एक अवधि के लिए, मुझे लगता है कि आप इसे सेकंड में स्टोर कर सकते हैं। तो, मुझे लगता है कि आपके पास ऐसा कुछ होगा; एक चाबी की ओर इशारा करते अपने विज्ञापन के लिए

  • start_time - - (डेटा प्रकार समय विज्ञापन शुरू कर देना चाहिए

    +-----------+--------------------------+------------------+ 
    | advert_id | start_time    | duration_seconds | 
    +-----------+--------------------------+------------------+ 
    | 2342342 |'2012-11-12 10:23:03'  | 86400   | 
    +-----------+--------------------------+------------------+ 
    

    1. advert_id (उदाहरण के लिए, हम इस तालिका adverts कॉल करेंगे) - TIMESTAMP)
    2. DURATION_SECONDS - सेकंड में समय है कि विज्ञापन के लिए "लाइव" (पूर्णांक (11)

      एस माना जाता है ELECT TIME_TO_SEC (timediff (अब(), start_time)) 'time_difference_in_seconds_since_advert_started' के रूप में adverts से;

    यदि आप केवल उन्हीं विज्ञापन प्राप्त करना चाहते हैं जो समाप्त नहीं हुए हैं, तो आप इस तरह की एक क्वेरी चलाएंगे;

    SELECT * FROM `adverts` WHERE TIME_TO_SEC(timediff(now(),start_time))<=`duration_seconds`; 
    

    एक तरह से मैं इसे करना होगा अगर मैं "अवधि" फ़ील्ड साथ जाने के लिए थे है यही कारण है कि।

  • +1

    का निर्णय लेने में आपकी सहायता कर सकता है यह बिल्कुल ठीक है जो मैं बात कर रहा हूं, लेकिन ऐसा करने के लिए सबसे अच्छा फ़ील्ड प्रकार इसे स्टोर करने के लिए सबसे अच्छा क्षेत्र प्रकार क्या होगा। जैसा कि ऊपर वर्णित DevArt के रूप में, मैं समय सीमा मुद्दे के आसपास पाने के लिए BIGINT का उपयोग कर सकते हैं। हालांकि उत्तर के लिए धन्यवाद, यह बहुत अच्छी तरह लिखा है।^_^ – cosmicsafari

    +0

    ठीक कॉस्मिक्सफारी। इसे सही उत्तर के रूप में चुनना न भूलें;) – mwangi

    0

    सबसे अच्छा समाधान नहीं है लेकिन आप अपने डीबी में एक कॉलम जोड़ सकते हैं, और 24 घंटों से अधिक समय की जांच कर सकते हैं, इसे 1 दिन के रूप में गणना करें और उस कॉलम में लिखें, और शेष समय समय कॉलम में लिखें। लेकिन डीबी से चयन करने के लिए आपको

    1

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

    SELECT time DIV 86400 AS days, SEC_TO_TIME(column1 MOD 86400) AS time FROM table 
    

    जहां 86400 24h (60 * 60 * 24 = 86400) में कई सेकंड हैं।