Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Left Join geeft verkeerde resultaat

Pagina: 1
Acties:

  • bendedit
  • Registratie: Oktober 2003
  • Laatst online: 22-11 16:59
Ik ben bezig met een onderdeel van een webshop dat een lijst met alle categorieën moet weergeven plus het aantal producten achter een categorie. Nou zijn er 3 relevante tabellen namelijk:

Product: id, title, description, price
nested_category: id, name, lft, rgt
category_map: category_id, product_id //1 product kan in meerdere categorieën, vandaar deze koppeltabel

De query die ik nodig heb moet nested_category.id, nested_category.name, nested_category.left, nested_category.rgt en het aantal producten per
category uit de database halen.

wat wel lukt is een query waar de gewenste resultaten uitkomen echter zonder de categorieën waar geen producten achter zitten:

SELECT parent.name, COUNT(p.title)
FROM nested_category AS node ,nested_category AS parent, product AS p, category_map AS cm
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = cm.category_id
AND p.id = cm.product_id
GROUP BY parent.name
ORDER BY node.lft;

Dus het moet sowieso een left join worden. Nou heb ik na wat gekloot de volgende query:

SELECT parent.id, parent.name, parent.lft, parent.rgt, COUNT( cm.product_id ) AS nr_products
FROM nested_category AS node, nested_category AS parent
LEFT JOIN category_map AS cm ON parent.id = cm.category_id
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY parent.id
ORDER BY node.lft

Dit begint erop te lijken maar deze lijkt alleen de producten achter de childnodes (De nodes waar het verschil tussen lft en rgt 1 is...) te tellen
Dus alle kolommen worden correct teruggegeven behalve nr_products

Zelf kom ik er even niet uit dus wat feedback zou wel welkom zijn... :?

  • bendedit
  • Registratie: Oktober 2003
  • Laatst online: 22-11 16:59
Hele dag mee bezig geweest... en ineens heb je het:

SELECT node.id, node.name, node.lft, node.rgt, COUNT( p.title )
FROM nested_category AS parent, nested_category AS node
LEFT JOIN category_map AS cm ON ( cm.category_id = node.id )
LEFT JOIN product AS p ON cm.product_id = p.id
WHERE node.lft
BETWEEN parent.lft
AND parent.rgt
GROUP BY parent.name
ORDER BY node.lft

:*)