Mysql query ne deluje pravilno

Imam spodnjo tabelo

Recimo, da želim izpisati vse vnose s parentid = 0 ampak ob pogoju, da mi še izpiše seštevek kolikokrat se id posameznega vnosa ponovi še v parentid. Upam, da sem razumljivo vprašal.

Zapisal sem query...

SELECT id, (SELECT COUNT(*) FROM categories WHERE parent_id = id) FROM categories WHERE parent_id = 0

ki mi vrne

kar pa ni pravilno, ker bi moralo pri id=3 biti zapisano 2

Recimo, če za test zapišem

SELECT id, (SELECT COUNT(*) FROM categories WHERE **parent_id = 3**) FROM categories WHERE parent_id = 0

count query deluje pravilno

Kakšna ideja, kaj počnem narobe, da mi ne zazna pravilnega id-ja?

4 odgovori

Query deluje povsem pravilno. Ti nepravllno primerjaš stvari, ki jih ne želiš primerjati. :)

Da na kratko razložim kaj delaš narobe: pogoj "WHERE parentid = id" naredi to, da sešteješ vse zapise v tabeli categories, ki imajo polje id enako polju *parentid*, kar je pa pravilno enako nič. Težavo boš rešil z aliasi:

SELECT id, (
  SELECT COUNT(*) FROM categories **AS c**
  WHERE **c.**parent_id = **categories.**id
)
FROM categories WHERE parent_id = 0;
3

naredi raje join na isto tabelo (on c1.parent_id=c2.id) in nato daj group by c1.id

dodajam: me je vini prehitel s čisto kul rešitvijo :)

Seveda, jaz sem v oklepaju primerjal parentid z id query-ja v oklepaju in ker jasno v tabeli nikjer ni parentid = id, mi je je za vse count-e zapisalo 0. Lahk bi vedel, da ne gre za isti id :) Hvala Vini za pomoč, sedaj, jasno, deluje tako kot sem želel.

1

ze nekaj casa nisem SQL-a pisal sam a se ne nardi to z group by

1