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

PHP MySQL का उपयोग करके नेस्टेड JSON बनाना

सबअरे डेटा को कुशलतापूर्वक समूहबद्ध करने के लिए, आपको अस्थायी कुंजियों को लागू करना चाहिए। cityId समूह के लिए उपयुक्त मान है -- क्योंकि cityNames भविष्य में जानबूझकर डुप्लिकेट किया जा सकता है लेकिन cityId अपनी डेटाबेस तालिका में कभी भी अनजाने में/जानबूझकर डुप्लिकेट नहीं करना चाहिए।

जब प्रत्येक नया cityId सामने आया है, सशर्त isset() कॉल यह निर्धारित करेगा कि क्या डेटा का एक नया/पूर्ण सेट संग्रहीत किया जाना चाहिए, या यदि डेटा को केवल उप-सरणी में जोड़ा जाना चाहिए।

मैं array_slice() को कॉल कर रहा हूं चूंकि यह अनावश्यक सिंटैक्स / कोड-ब्लोट को कम करता है।

सभी पंक्तियों को दोहराने के बाद, आप $result . को फिर से अनुक्रमित कर सकते हैं सरणी, इसे runBasedOnCity . के अंदर नेस्ट करें , और status जोड़ें तत्व।

मैं PRETTY_PRINT के साथ अपना डेमो दिखाऊंगा ताकि इसे पढ़ना आसान हो, लेकिन आपके वास्तविक कोड में, आपको पैरामीटर को हटा देना चाहिए। साथ ही, सलाह का एक शब्द - बेहतर पठनीयता के लिए अपने चर नामों को संक्षिप्त रखने का प्रयास करें।

कोड:(डेमो )

$resultset = [
    ["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
    ["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
];

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

$result = array("status" => true, "runsBasedOnCity" => $result);

var_export(json_encode($result, JSON_PRETTY_PRINT));

आउटपुट:

'{
    "status": true,
    "runsBasedOnCity": [
        {
            "id": "1",
            "cityId": "1",
            "Bengaluru": [
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "5",
                    "distance": "3k",
                    "status": "0"
                }
            ]
        },
        {
            "id": "4",
            "cityId": "2",
            "Chennai": [
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "4",
                    "distance": "15k",
                    "status": "1"
                }
            ]
        }
    ]
}'

यह समझाने के बाद कि आप id . को कैसे सुरक्षित रखना चाहते हैं उप-सरणी में मान, यहाँ वह समाधान है:

कोड:(डेमो )

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));



  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 में SQL सर्वर की @@ त्रुटि के बराबर है?

  2. zf2 टेबलगेटवे कॉलम नाम से कॉलम का चयन करें

  3. विदेशी कुंजी कैसे जोड़ें (MySQL)

  4. मानदंड के आधार पर MySQL अतिव्यापी समय अवधि

  5. MySQL क्वेरी - 'CAST' 'CONCAT' - डेटा की कई पंक्तियों को एक निश्चित राशि से कैसे गुणा करें और £'s में एक नए कॉलम में उनके व्यक्तिगत योग प्रदर्शित करें?