| 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: 13 let
|
|||
0