2011-10-23 31 views
0

ブランド、サイズなどのカスタムフィールドを商品に適用することができる属性システムがあります。 サイトのフロントエンドにリストが表示されます製品および属性にフィルタリングすると期待する項目の数のリストの:属性クエリ。内部にヒットしない属性も含まれています

  • ブランドA(12)
  • ブランドB(8)
  • ...

サイズ:

  • サイズ(9)
  • サイズb私も属性のリストを更新すると、フィルタ後(11)

には「ヒット」を持っていないそれらのレコードが含まれます。私の現在のクエリでは、ヒットしたレコードしか取得できません。

要約:0アイテムの属性を取得するにはどうすればよいですか?

私はおそらく、テーブルスキーマを助けることができるこのクエリ(選択された1つの属性フィルター付き一例)

SELECT 
    attr.id, attr.title 
    , attrval.value, attrval.id as valid 
    , COUNT(attrlink.id) AS attrcount 
FROM #__foc_users_attributes AS attr 
LEFT JOIN #__foc_users_attr_val AS attrval 
     ON attrval.attrid = attr.id AND attrval.value !='' 
LEFT JOIN #__foc_users_attr_link AS attrlink 
     ON (attrlink.valueid = attrval.id) 
LEFT JOIN #__foc_users_items AS item 
     ON (item.id = attrlink.itemid) 
INNER JOIN #__foc_users_attr_link AS attrlink1 
     ON attrlink1.itemid = item.id 
     AND ((attrlink1.attrid=1 AND attrlink1.valueid=33)) 
WHERE item.published=1 AND attr.published = 1 AND attrval.value != '' 
GROUP BY attrval.id 
+0

を持っています。解決策は、最初のテーブルとして#__foc_users_itemsを書いて残りのすべてのものに対して左の結合を行うことです。なぜ#__foc_users_attr_linkには左結合ではなく内部結合があるのですか? – danihp

+0

あなたは正しいです。私は、それぞれの属性グループごとに左結合を使用して、今すぐ動作させてください!返信ありがとう。 – Bert

答えて

1
SELECT 
    attr.id, attr.title 
    , attrval.value, attrval.id as valid 
    , COUNT(attrlink.id) AS attrcount 
FROM #__foc_users_attributes AS attr 
LEFT JOIN #__foc_users_attr_val AS attrval 
     ON attrval.attrid = attr.id AND attrval.value !='' 
LEFT JOIN #__foc_users_attr_link AS attrlink 
     ON (attrlink.valueid = attrval.id) 
LEFT JOIN #__foc_users_items AS item 
     ON (item.id = attrlink.itemid) 
LEFT JOIN #__foc_users_attr_link AS attrlink1 <<-- replace inner with LEFT join 
     ON attrlink1.itemid = item.id 
     AND ((attrlink1.attrid=1 AND attrlink1.valueid=33)) 
WHERE item.published=1 AND attr.published = 1 AND attrval.value != '' 
GROUP BY attrval.id 
関連する問題