जब आप क्वेरी तैयार करते हैं तो कॉलम की संख्या और नाम निश्चित होना चाहिए। ठीक इसी तरह SQL काम करता है।
तो आपके पास इसे हल करने के दो विकल्प हैं। दोनों विकल्पों में आवेदन कोड लिखना शामिल है:
(1) अलग-अलग मान पूछें way
. का और फिर अलग-अलग मानों की संख्या के रूप में SELECT-सूची में कई कॉलम जोड़कर, पिवट क्वेरी बनाने के लिए इनका उपयोग करने के लिए कोड लिखें।
foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
$way = (int) $row["way"];
$way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) .
"FROM `MyTable` GROUP BY `stop`";
अब आप नई क्वेरी चला सकते हैं, और इसमें उतने ही कॉलम हैं जितने अलग-अलग way
मान।
$pivotstmt = $pdo->query($pivotsql);
(2) डेटा पंक्ति को पंक्ति के अनुसार क्वेरी करें जैसा कि यह आपके डेटाबेस में संरचित है, और फिर डेटा प्रदर्शित करने से पहले कॉलम में पिवट करने के लिए कोड लिखें।
$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
$stopkey = $row["stop"];
if (!array_key_exists($stopkey, $stoparray)) {
$stoparray[$stopkey] = array("stop"=>$stopkey);
}
$waykey = "way_" . $row["way"];
$stoparray[$stopkey][$waykey] = $row["time"];
}
अब आपके पास सरणियों की एक सरणी है जो वैसी ही दिखती है जैसे कि आपने पिवट क्वेरी चलाई थी, लेकिन आपके द्वारा चलाई गई वास्तविक SQL बहुत सरल थी। आपने क्वेरी परिणाम को सरणियों के एक अलग सेट में पोस्ट-प्रोसेस किया है।