Autor Zpráva
Dejv
Profil *
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
Např se na každý filtr zeptat kolik je tam dotazů, tedy asi 3 - nabídka, poptávka a výměna.
Dejv
Profil *
aDAm:
Na titulní straně není žádný filtr v url.
Michall
Profil *
<?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
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 *
Tori:
Díky, tohle se mi líbí. Udělám LEFT JOIN. Chtěl jsem mít právě jeden dotaz.
Dejv
Profil *
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

?
peta
Profil
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
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
peta, Tori:
Pokud vím, tak to vyžaduje např. Oracle. MySQL takové omezení nemá.
Tori
Profil
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 :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0