Autor | Zpráva | ||
---|---|---|---|
Dejv Profil * |
#1 · Zasláno: 15. 3. 2013, 13:11:02 · Upravil/a: Dejv
Zdravím,
řeším teď takovej malej bazar pro klub. Aby mohli dávat inzeráty. Mám tabulku, kde je filtr na typ příspěvku podle type, dále se to filtruje podle parametru v url. Na titulní straně bazaru potřebuji vypsat počty jednotlivých příspěvků dle daného type. Jak na to? Díky. $bazar = DB::query("SELECT SQL_CALC_FOUND_ROWS * FROM `" . _mysql_prefix . "-bazar` WHERE visible='1' ".$cond." ORDER BY time DESC ".(!$filtr ? '' : ' LIMIT 10').""); //pocet radku v db $number = mysql_result(mysql_query(" SELECT FOUND_ROWS()"), 0); if(!$filtr && !_get('show') && !_get('edit') && !_get('del')){ $module.="<h1>Bazar</h1>"; $module.=$add; $module.="<div class='filtr'>"; $module.=" <table class='advscats'> <tr class='legend'> <td>Bazar</td> <td>Příspěvků</td> <td>Poslední příspěvek</td> </tr> <tr> <td><a href='{$url}&filtr=1' class='".($filtr==='1' ? 'selected ' : '')."nabidka'>Nabídka</a></td> <td>".$number."</td> <td>-</td> </tr> <tr> <td><a href='{$url}&filtr=2' class='".($filtr==='2' ? 'selected ' : '')."poptavka'>Poptávka</a></td> <td>".$number."</td> <td>-</td> </tr> <tr> <td><a href='{$url}&filtr=3' class='".($filtr==='3' ? 'selected ' : '')."vymena'>Výměna</a></td> <td>".$number."</td> <td>-</td> </tr> </table>"; $module.="</div>"; $module.="<h2>Poslední inzeráty</h2>"; } Nad dotazem mám teda ještě podmínky pro něj: $cond=""; if($filtr){ //pokud je zvolen typ nabidky $cond=" AND type=".$filtr; if($cg){ //pokud je vybrana kategorie $cond=" AND type=".$filtr." AND category=".$cg; } } if($adid){ //pokud potrebuji dotaz omezit pouze na jedno id $cond=" AND id=".$adid; } if($del){ //pokud potrebuji dotaz omezit pouze na jedno id $cond=" AND id=".$del; } if($edit===1){ //neni treba dotaz $cond=""; } if($editing){ //pokud potrebuji dotaz omezit pouze na jedno id $cond=" AND id=".$adid; } |
||
aDAm Profil |
#2 · Zasláno: 15. 3. 2013, 14:05:38
Např se na každý filtr zeptat kolik je tam dotazů, tedy asi 3 - nabídka, poptávka a výměna.
|
||
Dejv Profil * |
#3 · Zasláno: 15. 3. 2013, 16:44:52
aDAm:
Na titulní straně není žádný filtr v url. |
||
Michall Profil * |
#4 · Zasláno: 15. 3. 2013, 17:18:02
<?php function pocet($type){ $vysledek=mysql_query("SELECT id FROM `" . _mysql_prefix . "-bazar` WHERE `visible`='1' AND `type`='".$type."'"); $radku=mysql_num_rows($vysledek); return $radku; } echo pocet(1); // Nabídka echo pocet(2); // Poptávka echo pocet(3); // Výměna ?> |
||
Tori Profil |
#5 · Zasláno: 15. 3. 2013, 17:21:13
Tak než tu budou ještě divnější řešení:
SELECT `type`, COUNT(*) as pocet FROM prefix-bazar GROUP BY `type` Index na sloupci type to patrně urychlí.
|
||
Dejv Profil * |
#6 · Zasláno: 15. 3. 2013, 17:47:29
Tori:
Díky, tohle se mi líbí. Udělám LEFT JOIN. Chtěl jsem mít právě jeden dotaz. |
||
Dejv Profil * |
#7 · Zasláno: 15. 3. 2013, 19:11:33
Tori:
Neuměl by jsi to dosadit do toho mého dotazu? Nějak mi to nejde :| |
||
Tori Profil |
Dejv:
[#1]: „Na titulní straně bazaru potřebuji vypsat počty jednotlivých příspěvků dle daného type.“ [#7]: „Neuměl by jsi to dosadit do toho mého dotazu“ Do jakého? Ten v [#1] se týká filtrování a v příspěvku [#3] píšete, že na „titulní straně není žádný filtr v url.“ Nemůžete jedním dotazem zjistit zároveň počet výsledků vyhovujících jedné skupině podmínek (=filtr) a zároveň druhé (=počty záznamů pro jednotlivé typy). Resp. asi by to šlo, ale krkolomně, nehezky a zbytečně. V #5 mi chybí ta podmínka s visible = 1, doplňte si ji. Anebo jsem možná nepochopila, co vlastně chcete. Předpokládala jsem totéž, co Michall - teda „inzerátů typu 1 je tolik a tolik inzerátů typu 2 je ... atd.“ - anebo to přece souvisí s tím filtrem, např.: „podmínce A vyhovuje 10 záznamů, podmínce B vyhovuje 407 všem podmínkám dohromady vyhovuje 1“ ? |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
#9 · Zasláno: 18. 3. 2013, 13:20:15
Dejv:
Neumis sestavit group by, asi. google = group by example mysql. http://www.mysqltutorial.org/mysql-group-by.aspx Treba na tehle strance by ses dozvedel, ze vsechny sloupce, co jsou na radku SELECT musi byt na radku GROUP BY. SELECT c1,c2,... cn, aggregate_function(expression) FROM table WHERE where_conditions GROUP BY c1, c2, ... cn |
||
Tori Profil |
#10 · Zasláno: 18. 3. 2013, 19:34:13
peta:
„Treba na tehle strance by ses dozvedel, ze vsechny sloupce, co jsou na radku SELECT musi byt na radku GROUP BY.“ Ne, opravdu?! Ach, žila jsem v bludu... Ale vážně: jednak je tohle blbost samo o sobě a za druhé se na odkázané stránce nic takového nepíše. Jste-li opačného názoru, uvítám citaci, ale já tam nic takového neviděla. |
||
Jan Tvrdík Profil |
#11 · Zasláno: 18. 3. 2013, 22:32:57
peta, Tori:
Pokud vím, tak to vyžaduje např. Oracle. MySQL takové omezení nemá. |
||
Tori Profil |
#12 · Zasláno: 18. 3. 2013, 22:45:56
Jan Tvrdík:
Fíha, díky, jiné DB jsou pro mě ještě španělská dědina. Nicméně, dotaz i tutoriál jsou k MySQL, takže výrok zpátky neberu :) |
||
Časová prodleva: 11 let
|
0