Hoi iedereen,

Ik heb een spellensysteem, en nu wil ik bij de categorieën limiteren op bijv. 20 spellen. Dat is simpel (LIMIT 0,20).

Maar ik wel dat hij de 20 nieuwste spellen dan laat zien. Da's ook niet moeilijk (ORDER BY toegevoegd DESC).

Nu komt het probleem. Ik heb deze query dus:

SELECT ID, naam, bestand, bestandstype, toegevoegd FROM spellen WHERE categorie = 'Avontuur' ORDER BY toegevoegd desc LIMIT 0, 10


En deze PHP-code om de gamebox te maken:


<td align="left" width="201" class="gamebox"><br>
    <!-- Avontuur -->
    <ul>
    <?php
    while ($avontuur = mysql_fetch_array($avontuurquery, MYSQL_ASSOC)) {
    list(, $klein) = explode(",", $avontuur['bestandstype']);
    ?>
<li><a href="index.php?pagina=spellen&amp;actie=speel&amp;ID=<?php echo $avontuur['ID']; ?>" onmouseover="return mouseoverimage('<?php echo $avontuur['naam']; ?>', '<?php echo $avontuur['bestand'].".".$klein; ?>')" onmouseout="return mouseout()"><?php echo stripslashes(htmlentities($avontuur['naam'])); ?></a><?php 
if (strtotime($avontuur['toegevoegd']) >= time() - 84600) { echo " <span class=\"nieuw\">Nieuw!</span>"; } ?></li>
    <?php } ?></ul>
</td>


Nu wil ik alleen nog dat de namen op alfabetische volgorde worden weergeven. Ik kan het niet meer in de query doen, want daar zit al een ORDER BY in, en ook niet met de phpfunctie sort(), want ik voer een while loop uit.

Wie kan mij helpen om de namen in alfabetische volgorde te laten zien?
SELECT ID, naam, bestand, bestandstype, toegevoegd FROM spellen WHERE categorie = 'Avontuur' ORDER BY toegevoegd DESC, naam ASC LIMIT 0, 10
Jonathan schreef op 27.09.2007 19:49
SELECT ID, naam, bestand, bestandstype, toegevoegd FROM spellen WHERE categorie = 'Avontuur' ORDER BY toegevoegd DESC, naam ASC LIMIT 0, 10

Een tweede ORDER BY heeft pas zin als de eerste identiek is, dus als er meerdere dezelfde gegevens bij de eerste ORDER BY is, dan pas gaat hij de tweede ORDER BY gebruiken.

Iemand anders nog een oplossing?
Nu je 't zegt.
Je moet gewoon een lege array maken, dan door die while lopen en d.m.v. die while de array vullen. Dan kan je de array sorteren en met foreach op het scherm toveren.
Jonathan schreef op 27.09.2007 19:53
Nu je 't zegt.
Je moet gewoon een lege array maken, dan door die while lopen en d.m.v. die while de array vullen. Dan kan je de array sorteren en met foreach op het scherm toveren.

Kan wel, maar is er geen makkelijkere oplossing? Dan moet ik die hele while loop hierboven, en alles weer veranderen.

Kan hiet niet gewoon met een andere SQL query, of een functie in PHP?
Misschien werken met een sub-query.

SELECT 
  ID, 
  naam, 
  bestand, 
  bestandstype, 
  toegevoegd 
FROM 
  spellen 
WHERE 
  ID in(select id FROM 
                    spellen 
                  WHERE 
                   categorie = 'Avontuur' 
                  ORDER BY toegevoegd desc 
                  LIMIT 0, 10)
ORDER BY  naam


even uit mijn hoofd en niet getest. Kan zijn dat je nog met alias naam moet werken
Jeroen schreef op 27.09.2007 20:33
Misschien werken met een sub-query.

SELECT 
  ID, 
  naam, 
  bestand, 
  bestandstype, 
  toegevoegd 
FROM 
  spellen 
WHERE 
  ID in(select id FROM 
                    spellen 
                  WHERE 
                   categorie = 'Avontuur' 
                  ORDER BY toegevoegd desc 
                  LIMIT 0, 10)
ORDER BY  naam


even uit mijn hoofd en niet getest. Kan zijn dat je nog met alias naam moet werken

Ik ben er bijna, alleen volgens MySQL mag er geen LIMIT in een IN(). Is er nog een mogelijkheid dat het dan wel werkt, zoals ik het wil?
Mag er een LIMIT in een subquery? (de IN() waar jij het over hebt) Of kun je geen subquery uitvoeren? Welke versie van MySQL gebruik je?
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Ik heb de nieuwste versie van MySQL. Er mag dus geen LIMIT in de subquery.

Weet jij een oplossing?
@#$%^&*

Je hebt gelijk, dat werkt weer eens niet. Ik heb nieuws voor je, in pgSQL werkt dit dus wél. (en ja, ik heb met MySQL 5.0 en pgSQL 8.2 getest)

Wanneer je écht MySQL wilt gebruiken, ben ik bang dat je met 2 queries moet gaan werken. Het is een lapmiddel, maar dat is niet anders.

Al zou je ook met een stored procedure kunnen werken, maar ook daar zul je 2 queries in moeten zetten. Het enige verschil is dan dat je vanuit PHP slechts 1 query (de SP) hoeft aan te roepen.

Ik raad je aan om afscheid te nemen van MySQL, het blijft beperkingen houden.
pgFrank schreef op 27.09.2007 21:04
@#$%^&*

Je hebt gelijk, dat werkt weer eens niet. Ik heb nieuws voor je, in pgSQL werkt dit dus wél. (en ja, ik heb met MySQL 5.0 en pgSQL 8.2 getest)

Wanneer je écht MySQL wilt gebruiken, ben ik bang dat je met 2 queries moet gaan werken. Het is een lapmiddel, maar dat is niet anders.

Al zou je ook met een stored procedure kunnen werken, maar ook daar zul je 2 queries in moeten zetten. Het enige verschil is dan dat je vanuit PHP slechts 1 query (de SP) hoeft aan te roepen.

Ik raad je aan om afscheid te nemen van MySQL, het blijft beperkingen houden.

En kan ik dit dan niet verder regelen met PHP, dus dat PHP de namen in alfabetische volgorde zet?

Reageren