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