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

PHP, MYSQL नेस्टेड क्वेरीज़

मैंने गॉर्डन की क्वेरी को थोड़ा आसान बना दिया। यह अब बिल्कुल आपकी आवश्यकताओं को पूरा करता है।

SELECT
    `name`
FROM 
    (
        (SELECT 'project' as `type`, `name`, `id` as `projectid` FROM `Project`)
        UNION ALL
        (SELECT 'todo' as `type`, `name`, `projectid` FROM `Todo`)
    ) as `combined`
ORDER BY
    `project_id`, `type`

PHP केवल सभी पंक्तियों की सूची प्राप्त करने के लिए:

$q = $db->query("SELECT `name` FROM ((SELECT 'project' as `type`, `name`, `id` as `project_id` FROM `projects`) union all (SELECT 'todo' as `type`, `name`, `project_id` FROM `todos`)) as `combined` ORDER BY `project_id`, `type`");

while($row = $q->fetch_object()) {
    echo $row->name . '<br />';
}

PHP 'जटिल' क्वेरी के साथ नेस्टेड सूचियां प्राप्त करने के लिए:

$q = $db->query("SELECT `name`, `type` FROM ((SELECT 'project' as `type`, `name`, `id` as `project_id` FROM `projects`) union all (SELECT 'todo' as `type`, `name`, `project_id` FROM `todos`)) as `combined` ORDER BY `project_id`, `type`");

echo '<ul>';

$needToBeClosed = false;

while($row = $q->fetch_object()) {
    if($row->type == 'project' AND $needToBeClosed) {
        echo '</ul></li>';
        $needToBeClosed = false;
    }

    echo '<li>' . $row->name;

    if($row->type == 'project') {
        echo '<ul>';
        $needToBeClosed = true;
    } else {
        echo '</li>';
    }
}

if($needToBeClosed) {
    echo '</ul></li>';
}

echo '</ul>';

लेकिन जैसा कि आप देख सकते हैं, जितना अधिक आप अपनी क्वेरी में करने का प्रयास करते हैं। इसे सरल तरीके से उपयोग करने के लिए जितनी अधिक PHP की आवश्यकता होती है। तो आपको सबसे अच्छा कोड प्राप्त करने के लिए SQL और PHP के बीच संतुलन खोजने की आवश्यकता है। मैं आमतौर पर उपरोक्त दृष्टिकोण के लिए नहीं जाता, लेकिन बस इस तरह के कई प्रश्न करता हूं:

PHP 'जटिल' प्रश्नों के बिना नेस्टेड सूची प्राप्त करने के लिए:

$projects = $db->query('SELECT * FROM `projects`');

echo '<ul>';

while($project = $projects->fetch_object()) {
    echo '<li>' . $project->name . '<ul>';
    $todos = $db->query('SELECT * FROM `todos` WHERE `project_id` = ' . $project->id);

    while($todo = $todos->fetch_object()) {
        echo '<li>' . $todo->name . '</li>';
    }

    echo '</ul></li>';
}

echo '</ul>';

आपको अभी भी अपनी आवश्यकताओं के लिए प्रश्नों को संशोधित करने की आवश्यकता है (तालिका नाम और ऐसे)।



  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/PHP

  2. स्क्रिप्ट का उपयोग करके PHP MySQL डेटाबेस कनेक्शन का परीक्षण कैसे करें

  3. MySQL डेटाबेस से बनाई गई वस्तुओं को कैश कैसे करें

  4. MySQL रिमोट कनेक्शन [हमेशा की तरह नहीं]

  5. विभिन्न डेटा प्रकारों के उत्तरों के साथ सर्वेक्षण के लिए SQL डिज़ाइन