Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP/MySQL - एक नेविगेशन मेनू पदानुक्रम का निर्माण

एक रिलेशनल डेटाबेस में पदानुक्रमित डेटा कुछ हद तक कष्टप्रद है (ओरेकल को छोड़कर, जिसमें ऑपरेटर हैं START WITH/CONNECT BY इससे निपटने के लिए)। मूल रूप से दो मॉडल हैं :आसन्न सूची और नेस्टेड सेट।

आपने आसन्नता सेट चुना है, जो कि मैं आमतौर पर भी करता हूं। नेस्टेड सेट मॉडल की तुलना में इसे बदलना कहीं अधिक आसान है, हालांकि नेस्टेड सेट मॉडल को एक ही क्वेरी में सही क्रम में पुनर्प्राप्त किया जा सकता है। निकटता सूचियाँ नहीं हो सकतीं। आपको एक मध्यवर्ती डेटा संरचना (पेड़) बनाने और फिर उसे एक सूची में बदलने की आवश्यकता होगी।

मैं क्या करूँगा (और वास्तव में हाल ही में किया है) है:

  • पेरेंट आईडी द्वारा आदेशित एक क्वेरी में संपूर्ण मेनू सामग्री का चयन करें;
  • सहयोगी सरणियों या कक्षाओं/वस्तुओं का उपयोग करके मेनू संरचना का एक ट्री बनाएं;
  • नेस्टेड अनियंत्रित सूचियां बनाने के लिए उस पेड़ पर चलें; और
  • एक jQuery प्लग-इन का उपयोग करें जैसे Superfish उस सूची को मेनू में बदलने के लिए।

आप कुछ इस तरह बनाते हैं:

$menu = array(
  array(
    'name' => 'Home',
    'url' => '/home',
  ),
  array(
    'name' => 'Account',
    'url' => '/account',
    'children' => array(
      'name' => 'Profile',
      'url' => '/account/profile',
    ),
  ),
  // etc
);

और इसे इसमें रूपांतरित करें:

<ul class="menu">;
  <li><a href="/">Home</a></li>
  <li><a href="/account">Account Services</a>
    <ul>
      <li><a href="/account/profile">Profile</a></li>
...

मेनू सरणी उत्पन्न करने के लिए PHP काफी सरल है लेकिन हल करने के लिए थोड़ा सा परिष्कृत है। आप एक पुनरावर्ती ट्री-वॉकिंग फ़ंक्शन का उपयोग करते हैं जो HTML नेस्टेड सूची मार्कअप बनाता है लेकिन इसे पाठक के लिए एक अभ्यास के रूप में लागू करना छोड़ देगा। :)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - संग्रहीत कार्यविधि अप्रत्याशित मान लौटाती है

  2. क्या मैं एक प्रक्रिया/फ़ंक्शन का उपयोग किए बिना MySQL में लूप चला सकता हूं?

  3. mysql तालिका नाम में (-) डैश का उपयोग करना

  4. मैं Laravel 5 में mysql से XML में डेटा कैसे स्टोर कर सकता हूं?

  5. मैं SQL कीमिया से प्रभावित पंक्तियों की संख्या कैसे प्राप्त करूं?