9 berichten aan het bekijken - 1 tot 9 (van in totaal 9)
  • Q:
    Bijdrager
    kie_ken

    [mysql-php] eerst vast en erna random sorteren + pagination

    Ik ben nog begonnen met me te verdiepen in mySQL, en ik stuit op een probleem. Met de code hieronder kan ik gegevens uit mijn database halen en random sorteren. Maar ik zou bijvoorbeeld vijf bepaalde rijen altijd eerst willen tonen en dan pas de rest eronder random gesorteerd. Iemand een idee?

    gracias :innocent:
    (de afbeelding stelt voor wat het zou moeten worden)
    [code:1:0866715e10]<?
    $username="mysqlusername";
    $password="mysqlpassword";
    $database="mysqldatabase";

    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");
    $query="SELECT * FROM contacts ORDER BY RAND()";
    $result=mysql_query($query);

    $num=mysql_numrows($result);

    mysql_close();
    $i=0;
    while ($i < $num) {

    $naam=mysql_result($result,$i,"naam");
    $gegevens=mysql_result($result,$i,"gegevens");
    ?>[/code:1:0866715e10]

    Bijdrager
    iJoost

    Kent je de UNION? Nee? Daarmee kun je het resultaat van twee queries aan elkaar plakken.

    Bijdrager
    kie_ken

    zoiets dan als onderstaande code? Waarbij die vastcontacts dan de vaste zijn en daaronder de random.

    Maar hoe moet ik precies die UNION dan implementeren?

    [code:1:2e8763b7eb]SELECT * FROM vastcontacts ORDER BY DESC()
    UNION
    SELECT * FROM randomcontacts ORDER BY RAND()[/code:1:2e8763b7eb]

    (al bedankt voor me wat op gang te steken)

    Bijdrager
    kie_ken

    Na wat zoekwerk werkt het:D

    [code:1:b171cf058e] <?
    $username="mysqlusername";
    $password="mysqlpassword";
    $database="mysqldatabase";

    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");
    $query="(SELECT * FROM vastcontacts ORDER BY naam ASC) UNION (SELECT * FROM randomcontacts ORDER BY RAND())";
    $result=mysql_query($query);

    $num=mysql_numrows($result);

    mysql_close();
    $i=0;
    while ($i < $num) {

    $naam=mysql_result($result,$i,"naam");
    $gegevens=mysql_result($result,$i,"gegevens");
    ?>[/code:1:b171cf058e]
    Nogmaals bedankt iJoost, voor de aanzet :wink:

    Bijdrager
    iJoost

    Altijd leuk als de vragensteller ervoor open staat om iets te leren.:-)

    Bijdrager
    kie_ken

    en hier ben ik al met het volgende probleem: is het mogelijk om nog ‘pagination’ uit te voeren van die query?
    (dus bijvoorbeeld max 10 resultaten van die query per pagina + navigatie?)

    Ik heb al wat rondgezocht (hier bijvoorbeeld), maar ik zie niet hoe ik dat kan combineren met de vorige oplossing.

    iemand die me kan helpen?
    gracias :innocent:

    Bijdrager
    iJoost

    Bij MySQL zal dat met LIMIT moeten, inderdaad. Maar je zult er zelf nog wel het nodige omheen moeten programmeren om aan LIMIT de juiste parameters mee te kunnen geven en om de blader-navigatie erbij te maken.

    Misschien is dit een bruikbaar voorbeeld?

    Bijdrager
    kie_ken

    moet je die twee queries dan combineren?
    [code:1:7ae85791b5] $query="(SELECT * FROM contacts1 ORDER BY last ASC) UNION (SELECT * FROM contacts ORDER BY RAND())";[/code:1:7ae85791b5]met[code:1:7ae85791b5]$query = "SELECT val FROM randoms LIMIT $offset, $rowsPerPage";[/code:1:7ae85791b5]=[code:1:7ae85791b5]$query="((SELECT * FROM contacts1 ORDER BY last ASC) UNION (SELECT * FROM contacts ORDER BY RAND()))LIMIT $offset, $rowsPerPage";[/code:1:7ae85791b5]

    en dat voorbeeld toont de informatie op een totaal andere manier … niet?
    In onderstaand voorbeeld zie je hoe de informatie bij mij wordt getoond…
    [code:1:7ae85791b5]<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Untitled Document</title>
    </head>
    <body>
    <div>
    <?
    $username="username";
    $password="password";
    $database="database";
    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");
    $query="(SELECT * FROM vastcontacts ORDER BY last ASC) UNION (SELECT * FROM randomcontacts ORDER BY RAND())";
    $result=mysql_query($query);
    $num=mysql_numrows($result);
    mysql_close();
    $i=0;
    while ($i < $num) {
    $first=mysql_result($result,$i,"naam");
    $last=mysql_result($result,$i,"gegevens");
    ?>
    <? echo $naam; ?><br />
    <? echo $gegevens; ?><br />
    <?
    $i++;
    }
    echo "</div>";
    ?>
    </body>
    </html>[/code:1:7ae85791b5]
    Indien mogelijk iJoost (of een andere vrijwilliger), zou je nog een tipje van de sluier kunnen oplichten… want nu tast ik nog wat in het duister (het is allemaal nieuw voor mij) mercie…

    Bijdrager
    kie_ken

    zit nog altijd vast …
    ik probeer dit te combineren met het vorige maar het lukt me maar niet…

    iemand die me wil/kan helpen?
    gracias… :innocent:

9 berichten aan het bekijken - 1 tot 9 (van in totaal 9)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.