दूसरे में उपयोग करने के लिए, क्वेरी के परिणाम को अस्थायी रूप से कैसे बचाया जाए?


12

मेरे पास यह समस्या है मुझे लगता है कि आप मेरी मदद कर सकते हैं।
PS मुझे यकीन नहीं है कि यह कैसे कॉल किया जा सकता है, इसलिए यदि किसी को अधिक उपयुक्त शीर्षक मिलता है, तो कृपया संपादित करें।

पृष्ठभूमि

  • मैं बस पारगमन लाइनों की खोज के लिए यह आवेदन कर रहा हूं।
  • बस लाइनें एक 3 अंकों की संख्या हैं, और अद्वितीय है और यह कभी नहीं बदलेगी।
  • आवश्यकता स्टॉप ए से बी को रोकने के लिए लाइनों की खोज करने में सक्षम होना है।
  • उपयोगकर्ता इंटरफ़ेस पहले से ही मान्य स्टॉप नामों का उपयोग करने के लिए उपयोगकर्ता को संकेत देने में पहले से ही सफल है।
  • आवश्यकता यह प्रदर्शित करने में सक्षम होने के लिए है कि क्या किसी मार्ग की सीधी रेखा है, और यदि नहीं, तो 2-पंक्ति और यहां तक ​​कि 3-पंक्ति संयोजन प्रदर्शित करें।

उदाहरण:

मुझे बिंदु A से बिंदु D पर जाने की आवश्यकता है। कार्यक्रम को दिखाना चाहिए:

  • यदि एक सीधी रेखा ई.पू.
  • यदि नहीं, तो प्रदर्शन विकल्प, 2 लाइन कॉम्बो, जैसे कि एसी, सीडी।
  • यदि कोई 2-लाइन वाला कम्बॉस नहीं है, तो 3-लाइन वाले कॉम्बोस की खोज करें: AB, BC, CD।

बेशक, ऐप को बस लाइन नंबर प्रदर्शित करना चाहिए, साथ ही बसों को कब स्विच करना चाहिए।

जो मेरे पास है:

मेरा डेटाबेस निम्नानुसार संरचित है (सरलीकृत, वास्तविक डेटाबेस में स्थान और समय और क्या शामिल हैं):

+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+

+-------------------------------+
|    lines_stops_relationship   |
+-------------+---------+-------+
|  bus_line   | stop_id | order |
+-------------+---------+-------+

जहां lines_stops_relationshipबस लाइनों और स्टॉप के बीच कई-कई संबंधों का वर्णन है।

ऑर्डर, उस ऑर्डर को दर्शाता है जिसमें स्टॉप एक लाइन में दिखाई देता है। सभी रेखाएँ आगे-पीछे नहीं होतीं, और ऑर्डर का अर्थ होता है (ऑर्डर 2 के साथ बिंदु A, ऑर्डर 1 के साथ बिंदु B के बाद आता है)।

समस्या

  • हमें पता चलता है कि क्या कोई मार्ग आसानी से पर्याप्त मार्ग से गुजर सकता है। बस एक ही लाइन की खोज करें जो सही क्रम में दोनों बिंदुओं से गुजरती है।
  • यदि 2/3 लाइन कॉम्बो है तो मुझे कैसे पता चलेगा? मैं एक लाइन की खोज करने के लिए सोच रहा था जो स्रोत स्टॉप से ​​मेल खाती है, और गंतव्य स्टॉप के लिए एक है, और देखें कि क्या मैं उनके बीच एक सामान्य स्टॉप प्राप्त कर सकता हूं, जहां उपयोगकर्ता बसों को स्विच कर सकता है। मुझे कैसे याद है कि रोक?
  • 3 लाइन कॉम्बो और भी पेचीदा है, मुझे स्रोत के लिए एक लाइन और गंतव्य के लिए एक लाइन मिलती है, और फिर क्या? एक पंक्ति के लिए खोजें जिसमें 2 स्टॉप हैं मुझे लगता है, लेकिन फिर, मुझे स्टॉप्स कैसे याद हैं?

tl; डॉ

मुझे फिर से उपयोग करने में सक्षम होने के लिए क्वेरी से परिणाम कैसे याद होंगे? मैं इसे एक सिंगल क्वेरी (प्रत्येक के लिए, 1-लाइन मार्गों के लिए एक क्वेरी, 2 के लिए एक क्वेरी और 3-लाइन कॉम्बोस के लिए एक क्वेरी) प्राप्त करने की उम्मीद कर रहा हूं।

नोट: मुझे कोई आपत्ति नहीं है कि अगर कोई मेरे पास है, तो मैं किसी भी समाधान के लिए खुला हूं।

किसी भी सहायता को एक कुकी और एक उत्थान के साथ पुरस्कृत करेगा। अग्रिम में धन्यवाद!



@eggyal: मैं नोड्स पर कोई दूरी नहीं है। इसके अलावा, मैं नेटवर्क के अंदर आंदोलन में सीमित हूं (यानी बिंदु A से बिंदु B तक केवल कुछ बस लाइनें चलती हैं)। क्या यह अभी भी मेरे लिए उपयोगी है?
मदारा का भूत

मैं इसके लिए किसी एकल क्वेरी पर संग्रहीत कार्यविधि का उपयोग करने का भी सुझाव दूंगा - यदि यह एकल क्वेरी के साथ करना संभव है। वहां आप आसानी से परिणाम / चर स्टोर कर सकते हैं और उनका पुन: उपयोग कर सकते हैं।

1
@Truth यह शायद आपको कुछ टट्स देने के लिए सबसे अच्छा है: mysqltutorial.org/stored-procedures-loop.aspx (loops), mysqltutorial.org/… (मामलों) - dkkstra एल्गोरिथ्म की तरह कुछ के साथ संयुक्त, आप अपने हल करने में सक्षम होना चाहिए संकट। असल में, यह एक php फंक्शन की तरह है - लेकिन mysql पर

1
पहले से ही स्टैक ओवरफ्लो पर लगता है - इस लिंक में कई समाधान हैं, हालांकि इस समय कोई भी MySQL में नहीं है। (ऐसे कई उत्तर हैं जो आसानी से संक्षेप में नहीं देते हैं और सड़ांध शायद एक मुद्दा नहीं है क्योंकि यदि वह साइट चली जाती है तो यह संभवतः भी करता है। प्लस इसमें बहुत सारे अपवोट हैं)।
psr

जवाबों:


3

हो सकता है कि आप इस बिंदु पर इस परिवर्तन को कठोर नहीं बनाना चाहते हों, लेकिन आप जो वर्णन करते हैं वह ग्राफ़ डेटाबेस के लिए उपयोग के मामले में ठीक है । ग्राफ डेटाबेस , ग्राफ सिद्धांत पर आधारित होते हैं, जो कि आप बस मार्गों के एक निर्देशित ग्राफ में 'X' और 'Y' के बीच का रास्ता खोजने की कोशिश कर रहे हैं।

यदि आपने पहले से एक में नहीं देखा है, तो Neo4J जैसी किसी चीज़ पर नज़र डालें । इसमें एक REST API है और आप इसके लिए PHP क्लाइंट पा सकते हैं ।

आपको स्टैक ओवरफ्लो के लोगों का एक समूह मिलेगा जो चीजों के कार्यान्वयन पक्ष के साथ मदद कर सकता है।


1
मैं इस समय सोच के चरण में हूं, मैं कुछ भी बदल सकता हूं। मैं आपके लिंक की जाँच करूँगा। इसके अलावा, यह सवाल स्टैक ओवरफ्लो से आया है , मुझे पता है कि वे मुझे इसे लागू करने में मदद कर सकते हैं :)
मदारा का भूत

1
मैं पुनरावर्ती प्रश्नों का सुझाव देने जा रहा था, लेकिन ऐसा लगता है कि MySQL उन लोगों का समर्थन नहीं करता है, इसलिए यह उत्तर बेहतर हो सकता है।
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner एक बहुत ही अजीब MySQL समाधान हो सकता है जो एसपी और एक आसन्न सूची को मिलाएगा, लेकिन मुझे नहीं लगता कि यह इसके बारे में सोचने के समय के लायक भी है।
यानि

@YannisRizos: यह एक अच्छा कोड गोल्फ चुनौती हो सकती है? ;)
FrustratedWithFormsDesigner


0

मान लें कि कोई उपयोगकर्ता से जाना चाहता $start_idहै $end_id(दोनों मान्य stop_id मान हैं)। आप से एक वैध मार्ग खोजने के लिए इन प्रश्नों का उपयोग कर सकते $start_idकरने के लिए $end_id:

  1. प्रत्यक्ष मार्ग (सिंगल लाइन) के लिए खोजें:

    SELECT *
    FROM bus_stops bs1, bus_stops bs2
    WHERE bs1.stop_id=$start_id AND bs2.stop_id=$end_id AND bs1.bus_line=bs2.bus_line
  2. यदि पिछली क्वेरी के साथ कोई परिणाम नहीं है, तो 2 लिग्नेश का उपयोग करके मार्ग खोजें:

    SELECT *
    FROM bus_stops bs1, bus_stops bs2, bus_stops bs3, bus_stops bs4
    WHERE bs1.stop_id=$start_id
        AND bs1.bus_line=bs2.bus_line
    AND bs2.stop_id=bs3.stop_id
        AND bs3.bus_line=bs4.bus_line
    AND bs4.stop_id=$end_id

*उन फ़ील्ड से बदलें जिन्हें आपको वास्तव में पुनर्प्राप्त करने की आवश्यकता है।


नमस्कार जॉचलीन और स्वागत है! कृपया यह पता लगाने के लिए हमारे संपादन सहायता पृष्ठ को अच्छी तरह से पढ़ें कि आप मार्काडाउन का सबसे अधिक लाभ कैसे उठा सकते हैं। मैंने इस बार आपका उत्तर संपादित कर दिया है, आप मेरे संशोधन इतिहास को देख सकते हैं कि मैंने क्या संपादन किया है।
यानि

आप एक ही डेटाबेस से 4 बार क्यों चुन रहे हैं?
मदारा का भूत

और यदि मार्ग को पूरा करने के लिए आपको एक और बस लाइन ( bus_stops bs5) की आवश्यकता हो तो क्या होगा ?
FrustratedWithFormsDesigner 12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.