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

    [MySQL&PHP] alle rijen met zelfde waarde als 1 zien.

    mijn probleem:
    ik heb een database waar allemaal modellen in staan onder nummer en shoot en serie enzovoort.
    er zijn verschillende series, serie 1, serie 2 enz. binnen elke serie zijn er 15 shoots. Ik wil nu graag dat’ie als het ware alle waarden uit de database haalt met serie1, en dan niet SELECT * FROM database WHERE serie=1, maar dat ik eerst kan sorteren op serie en dan op shoot. Dus dat ik een gemakkelijk dynamisch lijstje kan krijgen.
    Eerst serie titel, dan alle shoots eronder en dan de volgende serie en daaronder weer alle shoots.

    Ik hoop dat ik duidelijk was, het is een beetje een vaag verhaal, maar kan iemand me helpen.

    Bijdrager
    tennapel

    Ik neem aan dat je in PHP de resultaten uit de database wilt ophalen dan de lijst wilt maken zoals jij wilt? Je kan alles in 1 query ophalen met een group by en een order by in je query, maar je krijgt dan alle resultaten in 1 array terug (als je bijvoorbeeld mysql_fetch_array gebruikt).

    Probleem is dan dat je de array moet gaan sorteren en dat is vaak niet zo heel snel. In principe kan je ook met twee loops werken waarbinnen je dan twee aparte sql queries afvuurt; databases zijn meestal wel heel snel met zoek en sorteer opdrachten:

    [code:1:e74c55611b]
    $q1 = mysql_query("select serie from table group by serie") or die(mysql_error());

    if ($r1 = mysql_fetch_array()) {
    do {

    echo $r1[serie];
    $q2 = mysql_query("select shoot from table where serie="$r1[serie]"") or die(mysql_error());

    if ($r2 = mysql_fetch_array($q2)) {
    do {
    echo $r2[shoot];
    } while ($r2 = mysql_fetch_array($q2));
    }
    } while ($r1 = mysql_fetch_array());
    }

    [/code:1:e74c55611b]

    Bijdrager
    Rttgfde

    bedankt! je code werkte niet echt maar wist mij wel te inspireren.
    het werkt nu en wel met deze code:

    [code:1:5e478b9253]<?
    $sql = mysql_connect(’+host+’, ‘+user+’, ‘+pass+’); mysql_select_db ("+db+");
    $q1 = mysql_query("select serie from +tabel+ group by serie") or die(mysql_error());
    while ($r1 = mysql_fetch_array($q1)){
    echo "Serie ".$r1["serie"]."<br />";
    $q2 = mysql_query("select * from +tabel+ where serie=’".$r1["serie"]."’") or die(mysql_error());
    while ($r2 = mysql_fetch_array($q2)){
    echo "".$r2["shoot"]." – ".$r2["naam"]."<br />";
    };
    };
    ?>[/code:1:5e478b9253]
    stel dat m’n database er zo uit ziet:
    [code:1:5e478b9253]serie|shoot|naam
    1 |1 |piet
    1 |2 |klaas
    2 |1 |kees[/code:1:5e478b9253]
    dan wordt dat:
    Serie 1
    1 – piet
    2 – klaas
    Serie 2
    1 – kees

    Bijdrager
    maruk

    Als wat wilt is eerst sorteren op serie en dan op shoot, dan kan het ook met 1 query.

    bv.

    [code:1:5953e72e92]
    <?php
    $db = mysql_connect($host, $user, $passwd);
    mysql_select_db($database);

    $sql = "SELECT * FROM table ORDER BY serie, shoot";
    $result = mysql_query($sql);

    $nums = mysql_num_rows($result);

    if($nums > 0) {

    $current_serie = 0;

    while($row = mysql_fetch_assoc($result)) {

    if($row[’serie’] != $current_serie) {
    echo "Serie ".$row[’serie’]."<br />n";
    $current_serie = $row[’serie’];
    }

    echo $row[’shoot’]." – ".$row[’naam’]."<br />";

    }

    }

    mysql_close($db);
    ?>
    [/code:1:5953e72e92]

    Bijdrager
    tennapel

    @maruk: in geval van grote tabellen zal dit trager zijn omdat PHP dan arrays in het geheugen moet sorteren.

    Bijdrager
    maruk

    @tennapel:

    PHP wordt ook op deze manier niet gebruikt om het resultaat te sorteren.
    Dat wordt met deze query al door MySQL gedaan.
    Ook wordt er maar 1 SELECT en 1 loop gebruikt.

    ipv.
    1 query voor de series, vervolgens een loop met binnen liggende query die binnen de eerste loop keer het aantal rows van de eerste query wordt uitgevoerd.

    Stel er zijn 10 unieke series. Dan wordt er 1 + 10 = 11 keer een query uitgevoerd ipv van 1.

    Of in het geval van het voorbeeld van dirksierd al 3.

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

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