ऐसा इसलिए है क्योंकि उत्पाद_नाम और उत्पाद_विवरण तालिका उत्पादों_विवरण (या TABLE_PRODUCTS_DESCRIPTION में अधिक विशिष्ट होने के लिए) में है, तालिका उत्पादों (TABLE_PRODUCTS) में नहीं है।
सभी बुनियादी जानकारी प्राप्त करने के लिए (विशेषताओं को छोड़कर) आपको निम्नलिखित क्वेरी निष्पादित करनी चाहिए:
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
// let's get all attribues for product
$productInfo = $q->fields;
$qattr = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id = " . (int)$q->fields['products_id']);
$attr = array();
while(!$qattr->EOF) {
$attr[] = $qattr->fields;
$qattr->MoveNext();
}
$productInfo['attributes'] = $attr;
$items[] = $productInfo;
$q->MoveNext();
}
// now let's output it
foreach($items as $item) {
echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
echo $items['products_price'] . '</p>';
}
हालांकि ध्यान दें कि यह कोड नहीं . करता है विशिष्ट श्रेणी के उत्पाद प्राप्त करें - इसमें सभी उत्पाद मिलते हैं, यहां तक कि वे भी जो निष्क्रिय हैं। विशिष्ट श्रेणी से उत्पाद प्राप्त करने के कई तरीके हैं लेकिन वे प्रदर्शन में भिन्न हैं। दुर्भाग्य से ऐसा करने का कोई सबसे अच्छा तरीका नहीं है क्योंकि यह डेटा पर निर्भर करता है। यदि आप जिन उत्पादों को पुनः प्राप्त करना चाहते हैं, वे 5 की श्रेणियों_आईडी वाली श्रेणी से संबंधित हैं और यह उनकी प्राथमिक श्रेणी है, तो यह पहली क्वेरी "WHERE Master_categories_id =5" में जोड़ने के लिए पर्याप्त है। लेकिन अगर श्रेणी उन उत्पादों के लिए मास्टर श्रेणी नहीं है, तो चीजें थोड़ी अधिक जटिल हो जाती हैं क्योंकि हमें products_to_categories तालिका तक पहुंचने की आवश्यकता होती है, जिससे कई उत्पादों वाली साइटों के लिए प्रदर्शन प्रभावित होता है। यदि आप प्रदर्शन के बारे में इतना नहीं जानते/परवाह नहीं करते हैं तो आप पहली क्वेरी को इसमें बदल सकते हैं:(यह मानते हुए कि आप पहले से ही अपनी श्रेणी की श्रेणियां_आईडी जानते हैं):
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);
निष्क्रिय उत्पादों से छुटकारा पाने के लिए निष्पादित करें
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE products_status = 1 AND pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);
(वास्तव में pd.products_id IS NOT NULL की आवश्यकता नहीं है क्योंकि हम पहले ही pd.language_id की जांच कर चुके हैं।)
विशेषताओं के बिना संस्करण संपादित करें
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
$items[] = $q->fields;
$q->MoveNext();
}
// now let's output it
foreach($items as $item) {
echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
echo $items['products_price'] . '</p>';
}