Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Join a Count(*)

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Join a Count(*)

Autor: AndyBrandy

14:25:18 24.08.2011

Maaartin: ano, toto reseni je spravne.. Zkousel jsem to podobne, az na to groupovani...

vlnk: Taky dobre reseni.. Ale zajimalo by me, jestli nebudou vnorene SELECT-y pomalejsi oproti JOIN..

Citovat příspěvek

 

Re: Join a Count(*)

Autor: vlnk

13:44:38 24.08.2011

Z toho úplně prvního vyhodit group nebo pro mne přehlednější:

select count(1) from items x
where status>0
and exists
(select 1 from itemscategories_items
where item_id=x.id and itemscategory_id in (3,4,5,6,7) )
and exists
(select 1 from items_zipcodes
where item_id=x.id and zipcode_id in (56326,56332,56325...) )

Citovat příspěvek

 

Re: Join a Count(*)

Autor: Maaartin

13:38:04 24.08.2011

Jeste jsem nevidel vypisovat COUNT a nic jinyho pri pouziti GROUP BY. Nakonec dostanes par cisel kde nevis co k cemu patri. I za predpokladu ze to tak opravdu potrebujes, tak prozatim vypis sloupce podle kterych grupujes. Tohle

> [ital]Potřebuji počet všech záznamů (items), které mají status > 0 a nacházejí se v kategoriích (3,4,5,6,7) a lokalitách (56326,56332,56325...)[/ital]

mi zni jako bys nemel grupovat vubec. Pokud sces kazdy item pocitat jen jednou (i kdyz se vyskytne vickrat), pak

SELECT COUNT(DISTINCT items.id)
AS `records_found` FROM `items`
INNER JOIN `itemscategories_items` ON (`items`.`id` = `itemscategories_items`.`item_id`)
INNER JOIN `items_zipcodes` ON (`items`.`id` = `items_zipcodes`.`item_id`)
WHERE
`items`.`status` > 0
AND `itemscategories_items`.`itemscategory_id` IN (3,4,5,6,7)
AND `items_zipcodes`.`zipcode_id` IN (56326,56332,56325,56335,56336,56331,56333,56334)
# bez grupace

jinak bez DISTINCT.

Citovat příspěvek

 

Re: Join a Count(*)

Autor: Ja On

13:02:54 24.08.2011

Zkusím:

select count(*) from (
SELECT `items`.`id` FROM ... GROUP BY `items`.`id`
)a

Citovat příspěvek

 

Re: Join a Count(*)

Autor: AndyBrandy

10:57:17 24.08.2011

Hmm, zkousim ruzne moznosti, ale bez uspechu.. Je to groupovani tak, jak jsi to myslel?

SELECT COUNT(*) AS `records_found` FROM `items`
INNER JOIN `itemscategories_items` ON (`items`.`id` = `itemscategories_items`.`item_id`)
INNER JOIN `items_zipcodes` ON (`items_zipcodes`.`item_id` = `items`.`id`)
WHERE `items`.`status` > 0
AND `itemscategories_items`.`itemscategory_id` IN (3,4,5,6,7)
AND `items_zipcodes`.`zipcode_id` IN (56326,56332,56325,56335,56336,56331,56333,56334)
GROUP BY `itemscategories_items`.`itemscategory_id`, `items_zipcodes`.`zipcode_id`

Citovat příspěvek

 

Re: Join a Count(*)

Autor: RomanZ

8:49:22 24.08.2011

Hned v prvnim prispevku delas chybu v tom, ze groupujes podle items.id. Goupovat musis podle kategorii a lokalit, potom Ti z toho vyjde pocet items v kategoriich a lokalitach.

Citovat příspěvek

 

Re: Join a Count(*)

Autor: AndyBrandy

13:43:16 23.08.2011

Po úprave dotazu z
"SELECT COUNT(*) AS `records_found` FROM `items`..."
na
"SELECT `items`.`id` FROM `items`..."
to vrátí správne výsledky (mají být 3, ne 2 :) )

Teď k tomu, co chci dotazem získat:
Potřebuji počet všech záznamů (items), které mají status > 0 a nacházejí se v kategoriích (3,4,5,6,7) a lokalitách (56326,56332,56325...)

Tady je struktura DB:

items
---------------------------
id (int)
status (tyniint)

itemscategories_items (mxn)
---------------------------
item_id (int)
itemscategory_id (int)

items_zipcodes (mxn)
---------------------------
item_id (int)
zipcode_id (int)

Citovat příspěvek

 

Re: Join a Count(*)

Autor: Maaartin

12:49:45 23.08.2011

Vypada to ze tam mas 3 ruzny id a k nim pocty 3,2,1. Proc si ty id proste taky nevypises?

Jinak k tomu neni co rict, proste to neco spocita a jestli to je dobre nebo spatne zalezi na tom co od toho sces (jestli ti staci vypsat "2", tak muzes udelat "SELECT 2" :D) a co mas za data. To krome tebe nikdo nevi.

Citovat příspěvek

 

Join a Count(*)

Autor: AndyBrandy

12:44:39 23.08.2011

Zdravim,
mám SQL dotaz, který má vrátit počet záznamů obsaženych v kategoriích a lokalitách.

SELECT COUNT(*) AS `records_found` FROM `items`
INNER JOIN `itemscategories_items` ON (`items`.`id` = `itemscategories_items`.`item_id`)
INNER JOIN `items_zipcodes` ON (`items`.`id` = `items_zipcodes`.`item_id`)
WHERE
`items`.`status` > 0
AND `itemscategories_items`.`itemscategory_id` IN (3,4,5,6,7)
AND `items_zipcodes`.`zipcode_id` IN (56326,56332,56325,56335,56336,56331,56333,56334)
GROUP BY `items`.`id`

Bohužel mám problém v tom, že výsledek vypadá nějak takhle:
records_found
3
2
1

Očekávaný výsledek by měl být "2", a nějak se v tom plácám, nevím si už rady..

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: