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&scaron;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
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 *
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
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í?

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