Autor | Zpráva | ||
---|---|---|---|
sajfix Profil * |
#1 · Zasláno: 22. 8. 2010, 14:45:12
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 |
#2 · Zasláno: 22. 8. 2010, 14:52:00
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 * |
#4 · Zasláno: 24. 8. 2010, 00:08:12
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 * |
#5 · Zasláno: 24. 8. 2010, 09:05:20
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 * |
#6 · Zasláno: 24. 8. 2010, 11:04:25
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. |
||
Časová prodleva: 14 let
|
0