Autor | Zpráva | ||
---|---|---|---|
jirivo Profil * |
Mám výpis záznamů z databáze, které mám seřazené tak, aby se řadily postupně podle kategorie a následně byly v těch kategoriích seřazeny náhodně. Vše by fungovalo, ale poté jsem přidal skript na stránkování a na první stránce je vše v pohodě, ale pak na dalších dochází v důsledku náhodného řazení k zobrazování záznamů, které byly třeba už na předešlé stránce a některé se tím pádem nemusí zobrazit vůbec. Potřebuju, aby se záznamy seřazovaly náhodně, aby nedocházelo k upředňosňováním jednotlivých institucí, ale také je potřeba stránkování, neboť záznamů je na jednu stranu hodně. Jak mám udělat, aby se záznamy nejprve všechny seřadily náhodně a poté se teprve vytvořilo stránkování s již dopředu seřazenejma záznamama, aby na dalších stranách nedocházelo k opětovnému načítání dat z databáze.
Tady je kód: $dbc = mysql_connect (DB_HOSTITEL, DB_UZIVATEL, DB_HESLO); mysql_select_db (DB_NAZEVDATABAZE); $dotaz = "SELECT CONCAT(jmenofirmy) AS jmenofirmy, CONCAT(popis) As popis, CONCAT(foto1) As foto1, CONCAT(id) As id FROM pm_properties WHERE popis LIKE '%$nalezeno%' ORDER BY varianta DESC"; $vysledek = @mysql_query ($dotaz, $dbc); // Spus?te dotaz. if ($vysledek) { // Je-li vše OK, zobrazit uživatele. $num=mysql_num_rows($vysledek); //$ctrl je pomocná premenná if ($ctrl<>1) { $strana=1; }//endif $limit=12; $celkovy_pocet=$num; $pocet_stran=ceil($celkovy_pocet/$limit); $pociatok=($strana*$limit)-$limit; for ($i=1; $i<=$pocet_stran; $i++) { if ($i<>$strana) {?> <a href="databaze.php?ctrl=1&strana=<?php echo $i; ?>&nalezeno=<?php echo $nalezeno; ?>"><?php echo $i; ?></a> | <?php } else { echo "<font color=\"#FF0000\">",$i,"</font> | "; }//endif }//endfor if ($strana<>$pocet_stran) { ?> <a href="databaze.php?ctrl=1&strana=<? echo $strana+1; ?>&nalezeno=<? echo $nalezeno; ?>">nasledující strana</a> <?php }//endif echo "</p>"; echo '<table align="center" cellspacing="2" cellpadding="2">'; $dotaz2 = "SELECT CONCAT(foto1) AS foto1, CONCAT(jmenofirmy) AS jmenofirmy, CONCAT(popis) As popis, CONCAT(id) As id FROM pm_properties WHERE vmesto like '%$mesto%' AND vkraj like '%$kraj%' AND aktivity like '%$aktivity%' ORDER BY varianta ASC, RAND() LIMIT $pociatok, $limit"; $vysledek2 = @mysql_query ($dotaz2); // Spus?te dotaz. if ($vysledek2) { // Je-li vše OK, zobrazit uživatele. echo '<table align="center" cellspacing="2" cellpadding="2">'; while ($radek = mysql_fetch_array($vyslednik, MYSQL_NUM)) { echo "<tr><td align=\"left\" width=\"60\" valign=\"top\"><img src=\"photos/{$radek[0]}\" border=\"0\" height=\"50\" width=\"55\"></td><td width=\"500\" align=\"left\"><b><font size=\"-1\" face=\"Arial, Helvetica, sans-serif\" color=\"#FF6600\"><a href=\" vizitka.php?id={$radek[3]}\">$radek[1]</a></font></b><br>$radek[2]<br /><hr><br /> </td><td align=\"right\" width=\"50\"><a href=\" vizitka.php?id={$radek[3]}\" ><img src=\"images/vice.jpg\" hspace=\"5\" border=\"0\">Více</a></td></tr>\n"; } echo '</table>'; mysql_free_result ($vysledek2); } } mysql_close(); |
||
ninja Profil |
#2 · Zasláno: 17. 8. 2009, 15:40:28
Jaký význam má stránkovat náhodné výsledky? Je možné pamatovat si již zobrazené řádky a ty z dotazu vyloučit, ale principiálně mě přijde "další stránka" u náhodných výsledků to samé jako "nový náhodný výběr".
|
||
jirivo Profil * |
#3 · Zasláno: 17. 8. 2009, 17:01:23
Právě že potřebuju, aby byly výsledky náhodně řazené, protože je tam podmínka, aby se instituce řadily nejprve podle typu účtu (standard, premium, gold) a poté až byla pozice jednotlivých institucí náhodně seřazena. Jde o to, aby nedocházelo k znevýhodnění jednotlivých institucí, aby třeba nebyly zobrazeny až úplně poslední u daného typu účtu, ale jejich pozice se náhodně měnila. A to stránkování mě právě dělá problémy, ale zase mít třeba 100 záznamů pod sebou se mi nezdá moc přehledné.
|
||
Alphard Profil |
#4 · Zasláno: 17. 8. 2009, 17:10:08 · Upravil/a: Alphard
Také nevidím důvod stránkovat náhodně seřazená data, připomíná mi to tohle :-)
<fed> htt p://lamer.cz/quotes/random <fed> ten druhej :D Co třeba na hodinu nebo den náhodně seřadit, vypisovat stále stejně a příště proházet pořadí? |
||
Časová prodleva: 15 let
|
0