मान लें कि आपके 7 टेबल आईडी से जुड़े हुए हैं, ऐसा कुछ करें
पहली क्वेरी
'SELECT * FROM table_a WHERE a_id IN (12,233,4545,67676,898999)'
// store the result in $result_of_first_query
फिर एक फ़ोरैच करें और उन आईडी को चुनें जिन्हें आप अगली क्वेरी में कॉमा सेपरेटेड वेरिएबल (सीएसवी) में उपयोग करना चाहते हैं
foreach($result_of_first_query as $a_row_from_first_table)
{
$csv_for_second_query = $csv_for_second_query.$a_row_from_first_table['b_id'].",";
}
$csv_for_second_query = trim($csv_for_second_query,", "); // problem is we will have a lot of duplicate entries
$temp_arr = array(); // so lets remove the duplicates
$temp_arr = explode(",",$csv_for_second_query); // explode values in array
$temp_arr = array_unique($temp_arr); // remove duplicates
$csv_for_second_query = implode(",",$temp_arr); // create csv string again. ready!
अब आपकी दूसरी तालिका के लिए, आपको केवल 1 क्वेरी के साथ वे सभी मान मिलेंगे जिनकी आपको जॉइन करने की आवश्यकता है (mysql द्वारा नहीं, हम इसे php के साथ करेंगे)
दूसरी क्वेरी
'SELECT * FROM table_b where a_id IN ('.$csv_for_second_query.')'
// store the result in $result_of_second_query;
फिर हमें केवल दो सरणियों को प्रोग्रामेटिक रूप से जोड़ने की आवश्यकता है।
$result_a_and_b = array(); // we will store the joined result of every row here
// lets scan every row from first table
foreach($result_of_first_query as $inc=> $a_row_from_first_table)
{
// assign every row from frist table to result_a_and_b
$result_a_and_b[$inc]['a']=$a_row_from_first_table;
$inc_b=0; // counter for the joins that will happen by data from second table
// for every row from first table we will scan every row from second table
// so we need this nested foreach
foreach($result_of_second_query as $a_row_from_second_table)
{
// are data need to join? if yes then do so! :)
if($a_row_from_first_table['a_id']==$a_row_from_second_table['a_id'])
{
$result_a_and_b[$inc]['b'][$inc_b]=$a_row_from_second_table; // "join" in our "own" way :)
++$inc_b; // needed for the next join
}
}
}
अब हमारे पास इस प्रारूप के साथ $result_a_and_b सरणी है:
$result_a_and_b[INDEX]['a']
$result_a_and_b[INDEX]['b'][INDEX]
इसलिए 2 प्रश्नों के साथ, हमारे पास TABLE_A_ROWS_NUMBER + 1 के समान परिणाम है (एक पहली तालिका की प्रारंभिक क्वेरी है)
इस तरह आप जितने चाहें उतने स्तर करते रहें।
- तालिका को लिंक करने वाली आईडी के साथ क्वेरी डेटाबेस
- आईडी को CSV स्ट्रिंग में प्राप्त करें
- WHERE id IN(11,22,33,44,55,.....) का उपयोग करके अगली सक्षम में क्वेरी करें
- कार्यक्रम में शामिल हों
युक्ति:आप unset()
. का उपयोग कर सकते हैं अस्थायी चर पर स्मृति मुक्त करने के लिए।
मेरा मानना है कि मैंने आपके प्रश्न का उत्तर दिया है "क्या डेटाबेस को इतनी बार क्वेरी न करने का कोई तरीका है?"
नोट:टाइपो के लिए कोड का परीक्षण नहीं किया गया है, हो सकता है कि मैं एक अल्पविराम से चूक गया या दो -या शायद नहीं
मुझे विश्वास है कि आप बात समझ सकते हैं :) आशा है कि यह मदद करता है!