2012-03-05 12 views
1

はここでの私の現在のカテゴリがMen Clothescat_id = 2あるとしましょうサブカテゴリIDから親カテゴリを取得するにはどうすればよいですか?

enter image description here

のMySQL文の

SELECT 
maincat.cat_id, 
maincat.cat_name, 
maincat.cat_parent, 
subcat.cat_id, 
subcat.cat_name, 
subcat.cat_parent 
FROM 
categories maincat 
INNER JOIN categories subcat ON subcat.cat_id = 2 

categoriesテーブルです。現在のステートメントで結果が4 Personal Itemsと表示されるため、親カテゴリ名を正しく取得するにはどうすればよいですか?

更新:

$get_cat = $db->get_results(" 
      SELECT 
      maincat.cat_id, 
      maincat.cat_name, 
      maincat.cat_parent, 
      subcat.cat_id, 
      subcat.cat_name, 
      subcat.cat_parent 
      FROM 
      categories maincat 
      INNER JOIN categories subcat ON subcat.cat_id = 2 
      "); 
foreach ($get_cat as $cat) 
{ 
echo '<option value="'.$cat->cat_id.'">'.$cat->cat_name.'</option>'; 
} 

現在の出力に含ま

<option value="1">Personal Items</option> 
<option value="1">Personal Items</option> 
<option value="1">Personal Items</option> 
<option value="1">Personal Items</option> 
<option value="1">Personal Items</option> 

答えて

2

あなたがJOINを行うと、それは、参加セルフだ場合でも、あなたが参加のための条件を追加する必要があります。ここでは、ON subcat.cat_parent = maincat.cat_idする必要があります:あなたはクエリは、親(NULLcat_parent列)を持っていないカテゴリに仕事をしたい場合は

SELECT 
    maincat.cat_id, 
    maincat.cat_name, 
    maincat.cat_parent, 
    subcat.cat_id   AS subcat_id, 
    subcat.cat_name  AS subcat_name, 
    subcat.cat_parent  AS subcat_parent 
FROM 
    categories maincat 
    INNER JOIN 
    categories subcat 
     ON subcat.cat_parent = maincat.cat_id 
WHERE 
    subcat.cat_id = 2 

INNER JOINLEFT OUTER JOINに変更する必要があります。

+0

男性用の衣服'。 'cat_id = 2'の場合、どうすれば結果は' Personal Items'ですか? –

+0

??その結果、サブカテゴリ(Mens Clothes)と親カテゴリ(Personal Items)の両方が表示されます。 –

+1

ああ、私は名前の異なるものと同じ名前の列の名前を変更する必要があると思います。私の編集を参照してください。 –

0

私は、このような単純なクエリを行うことは非常に複雑ではないでしょう。

SELECT name 
FROM categories 
WHERE cat_id = cat_parent 

cat_parentは、コードで定義されています、もちろん。この場合は、1となります。

+0

これは「個人用品」ではなく「男性用品」を返します –

+0

私は悪い、私は修正しました –

0
SELECT cat_id, cat_name, cat_parent FROM categories WHERE cat_id = 2
+0

これは「個人用品」ではなく「男性用品」を返します –

関連する問題