0

私の osCommerce ストアでは、サブカテゴリまたは子カテゴリを持たないカテゴリの parent_id を取得したいと考えています。

コードで次を使用しました。

$categories_query = tep_db_query("select c.categories_id, cd.categories_name 
    from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd 
    where c.parent_id = '$parent_id' and 
    c.categories_id = cd.categories_id 
    order by sort_order, cd.categories_name");

定数が入力されると、上記は次のように変換されます。

select c.categories_id, cd.categories_name 
    from categories c, categories_description cd 
    where c.parent_id = '$parent_id' and 
    c.categories_id = cd.categories_id 
    order by sort_order, cd.categories_name
4

2 に答える 2

0

これで行くことができます:

SELECT c.categories_id, cd.categories_name, c.parent_id 
  FROM categories c, categories_description cd 
  WHERE c.categories_id=cd.categories_id 
  AND c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2)
  ORDER BY c.sort_order, cd.categories_name

または、それで行くことができます:

SELECT c.categories_id, cd.categories_name, c.parent_id 
  FROM categories c 
  LEFT JOIN categories_description cd 
  ON c.categories_id=cd.categories_id
  WHERE c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2)
  ORDER BY c.sort_order, cd.categories_name

しかし、本当に知りたいのは次の行です。

  c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2)

列は、検索しているテーブルparent_idと同じテーブルにあり、別のテーブルにはないため、テーブル自体を検索し、別のエイリアスを介して参照する必要があります。

SQL のこの部分は、親カテゴリとして参照されているcategories_id(実際にはテーブル内の) すべてを返します。parents_id

SELECT DISTINCT c2.parent_id FROM categories c2

これをNOT IN比較すると、下に子カテゴリがない行が残ります。

于 2012-08-08T05:53:45.313 に答える
-1

テーブルのレイアウトを知らなくても、質問に答えるには推測が必要です。しかし、次のようなクエリが必要だと思います。

     SELECT c.parent_id
       FROM TABLE_CATEGORIES c
  LEFT JOIN TABLE_CATEGORIES_DESCRIPTION cd ON c.categories_id = cd.categories_id
      WHERE cd.categories_id IS NULL

このLEFT JOIN ... WHERE ... IS NULLパターンは、結合された最初のテーブルの行と一致し、2 番目のテーブルには一致しないことに注意してください。

于 2012-08-07T20:30:34.233 に答える