Mysql query ne deluje pravilno
 
thai 10. jul 2015 09:28:55 Pridružen od:
14. dec 2014
81 objav
32 31 2
#1

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?


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
Vini 10. jul 2015 09:40:11 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#2

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;
všeč(3) ni všeč(0) spam(0)
 
kelvan 10. jul 2015 09:41:59 Pridružen od:
19. okt 2007
891 objav
658 122 26
#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 :)


všeč(0) ni všeč(0) spam(0)
 
thai 10. jul 2015 10:00:10 Pridružen od:
14. dec 2014
81 objav
32 31 2
#4

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.


všeč(1) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
ledi 13. jul 2015 14:14:33 Pridružen od:
14. avg 2008
681 objav
325 223 14
#5

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


všeč(0) ni všeč(1) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se