Autor Zpráva
sajfix
Profil *
Zdravím,
mám takový problém, mám obrázky a jejich hodnocení a chtěl bych aby se u každého obrázku vypisovalo číslo pořadí podle řazení (kdyby měli 2 stejnou známku, tak podle počethodnocení a kdyby bylo stejné i počet hodnocení, tak podle názvu) celkovaznamka desc, pocethodnoceni desc, nazev.
Pak bych chtěl číslo pořadí zapsat do db do sloupce "poradi".
Dál jen vypsat řádek, kde by na začátku bylo to číslo pořadí.
Už si s tím nevím nějak rady.
Celý kód mám zatím takto:
    $navratp = "SET @poradi:=0";
    $navratp = mysql_query("SELECT (@poradi:=@poradi+1) as poradi, obrazek.celkovaznamka, obrazek.pocethodnoceni, obrazek.nazev FROM obrazek ORDER BY celkovaznamka DESC, pocethodnoceni DESC, nazev");

    while ($zaznamp = MySQL_Fetch_row($navratp)):
      $obnovit = MySQL_Query("UPDATE obrazek SET poradi = ".$zaznamp[0]);       
      echo ($zaznamp[0].'.(poradi) - '.$zaznamp[1].'(celkovaznamka) - '.$zaznamp[2].'x hodnoceno '.$zaznamp[3].'(-název)</br>');
   endwhile;

Prosím nevíte někdo, jak na to? Předem děkuju.
xmark
Profil
Nějak nerozumím tomu, proč spojuješ výpis s updatem.
Jestli ti při tom vypsání jde jen o zobrazení čísla, tak si dej na začátek $poradi = 1; a pak do toho while ++$poradi; a vypisuj $poradi. Nemusíš kvůli tomu updatovat.
Kajman_
Profil *
Pokud ale opravdu chcete uložit předpočítané pořadí, tak možná pomůže tento thread.
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=97602#21
sajfix
Profil *
xmark
Díky. Po malé úpravě jsem číslování řádků rozchodil.

Kajman_
Děkuju, na odkaz jsem se mrknul, ale asi tomu moc nerozumím. Asi by to mělo být nějak spojeno s tím číslováním řádků, že?
Teď mám něco takového, ale není to ono. Chybu to sice nehází, ale updatuje mi to samou 0.
$obnovit = MySQL_Query("UPDATE obrazek,
       (SELECT celkovaznamka, pocethodnoceni, nazev, min(poradi) poradi
        FROM obrazek
        GROUP BY celkovaznamka, pocethodnoceni, nazev
        HAVING count(*) > 1) as vypocet
SET    obrazek.poradi = vypocet.poradi
WHERE  obrazek.celkovaznamka = vypocet.celkovaznamka
       AND obrazek.pocethodnoceni = vypocet.pocethodnoceni
       AND obrazek.nazev = vypocet.nazev");
Kajman_
Profil *
No ten odkaz byl možná na trošku něco jiného, to řeší to, když máte např. pořadí 1 2 3 4 a chcete mít 1 2 2 4, protože ten druhý a třetí mají stejné hodnocení. Pokud chcete jen to 1 2 3 4, tak stačí upravit příklad z faq.

set @radek=0;
update obrazek set poradi=@radek:=@radek+1 order by celkovaznamka, pocethodnoceni, nazev;
sajfix
Profil *
Já jsem si říkal, že je to nějaký složitý. Skončil jsem u tohoto kódu:
$obnovit = MySQL_Query("SET @radek:=0");      
$obnovit = MySQL_Query("UPDATE obrazek SET poradi=@radek:=@radek+1 ORDER BY celkovaznamka DESC, pocethodnoceni DESC, nazev");

Děkuju moc za pomoc.

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: