0

Zen Cartを使っていて、現在ECサイトのメニューを構築中です。すべてのカテゴリを呼び出す方法はわかりましたが、顧客は最初の 4 つのカテゴリのみを表示することを望んでいます。現在、20 を超えるカテゴリがあり、リストに表示する必要があるのは最初の 4 つだけです。これを行うための最良かつ最も簡単な方法はわかりません。

リストを呼び出す方法はありますか

例:

<ul>
   <li>Menu One</li>
   <li>Menu Two
      <ul>
         <li>Submenu One</li>
         <li>Submenu Two</li>
         <li>Submenu Three</li>
      </ul>
   </li>
   <li>Menu Three</li>
   <li>Menu Four</li>
   <li>Menu Five</li>
   <li>ect...</li>
</ul>

そして、表示のみ

<ul>
   <li>Menu One</li>
   <li>Menu Two
      <ul>
         <li>Submenu One</li>
         <li>Submenu Two</li>
         <li>Submenu Three</li>
      </ul>
   </li>
   <li>Menu Three</li>
   <li>Menu Four</li>
</ul>

これが簡単な解決策であることを願っています!

ありがとう!

4

1 に答える 1

0

返信に基づいて、クエリは次のようになります。

// Categories
$lid = (int) $_SESSION['languages_id']; 
$sql = "SELECT c.categories_id, cd.categories_name, c.parent_id "
     . "FROM " . TABLE_CATEGORIES . " c, " 
     . TABLE_CATEGORIES_DESCRIPTION . " cd "
     . "WHERE c.categories_id = cd.categories_id and c.categories_status = 1 " 
     . "AND cd.language_id = '{$lid}' "
     . "ORDER BY c.parent_id, c.sort_order, cd.categories_name "
     . "LIMIT 4"; 
$categories = $db->Execute($sql);

// Subcategories of the above
$lid = (int) $_SESSION['languages_id']; 
$sql = "SELECT c.categories_id, cd.categories_name, c.parent_id "
     . "FROM " . TABLE_CATEGORIES . " c, " 
     . TABLE_CATEGORIES_DESCRIPTION . " cd "
     . "WHERE c.categories_id IN ("
     .     "SELECT c.categories_id "
     .     "FROM " . TABLE_CATEGORIES . " c, " 
     .     TABLE_CATEGORIES_DESCRIPTION . " cd "
     .     "WHERE c.categories_id = cd.categories_id and c.categories_status = 1 " 
     .     "AND cd.language_id = '{$lid}' "
     .     "ORDER BY c.parent_id, c.sort_order, cd.categories_name "
     .     "LIMIT 4" 
     . "); 
$subcategories = $db->Execute($sql);

あなたのデータベースの構造はわかりませんが、上記を使用して2段階のアプローチを行うことができます。最初の 1 つは、最初の 4 つのカテゴリを取得することです。2 番目のクエリは、これら 4 つのカテゴリのサブカテゴリを取得することです。

私はサブクエリをあまり支持していません - 私は可能な限りそれらを避けているので、私の見解ではあまり効率的な解決策ではありません. 次のように、最初のクエリを効果的に走査し、そこから ID を取得できます。

// Categories
$lid = (int) $_SESSION['languages_id']; 
$sql = "SELECT c.categories_id, cd.categories_name, c.parent_id "
     . "FROM " . TABLE_CATEGORIES . " c, " 
     . TABLE_CATEGORIES_DESCRIPTION . " cd "
     . "WHERE c.categories_id = cd.categories_id and c.categories_status = 1 " 
     . "AND cd.language_id = '{$lid}' "
     . "ORDER BY c.parent_id, c.sort_order, cd.categories_name "
     . "LIMIT 4"; 
$categories = $db->Execute($sql);

// Loop through the $categories and get the ids
$category_ids = array();
foreach ($categories as $category)
{
    $category_ids[] = $caregory->categories_id;
}
// Subcategories of the above
$lid = (int) $_SESSION['languages_id']; 
$sql = "SELECT c.categories_id, cd.categories_name, c.parent_id "
     . "FROM " . TABLE_CATEGORIES . " c, " 
     . TABLE_CATEGORIES_DESCRIPTION . " cd "
     . "WHERE c.categories_id IN (" . implode(",", $category_ids) . ")";
$subcategories = $db->Execute($sql);

私の見解では、上記はサブクエリよりもはるかに優れています。

HTH

ライオンへのクレジット

于 2012-09-24T21:04:52.653 に答える