login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Rare volgorde

Offline Voldemort - 06/08/2005 21:30 (laatste wijziging 06/08/2005 21:31)
Avatar van VoldemortPHP ver gevorderde Ik wil dat alle spreuken die ik ken in het groen staan en de andere in het rood. Ik probeer dit door deze code:

  1. <?php
  2. echo "Hier zie je alle spreuken die je kan leren. Ook zie je het level en het mp erbij staan. Sommige spreuknamen staan in het groen of rood. Die die in het groen staan kan je en die in het rood niet.<br /><br />
  3. <table width='96%' align='center' class='stijl_tblr' style='background-image:url('http://www.harrypotter-dreuzels.com/images/menukopjes.gif');'>
  4. <tr>
  5. <td width='32%'>
  6. Spreuknaam
  7. </td>
  8. <td width='32%'>
  9. Leren op level
  10. </td>
  11. <td width='32%'>
  12. Benodigd MP
  13. </td>
  14. </tr>
  15. </table>
  16. <table width='96%' border='0' align='center' class='stijl_lrb'>";
  17. $query2 = "SELECT `naam`, `level`, `mp` FROM `spreuken` WHERE `level` <= '".$fetch['duel_level']."'";
  18. $result2 = mysql_query($query2) or die(mysql_error());
  19. while($fetch2 = mysql_fetch_array($result2))
  20. {
  21. echo "<tr><td width='32%'><font color='green'>".$fetch2['naam']."</font></td><td width='32%'>".$fetch2['level']."</td><td width='32%'>".$fetch2['mp']."</td></tr>";
  22. }
  23.  
  24. $query3 = "SELECT `naam`, `level`, `mp` FROM `spreuken` WHERE `level` > '".$fetch['duel_level']."'";
  25. $result3 = mysql_query($query3) or die(mysql_error());
  26. while($fetch3 = mysql_fetch_array($result3))
  27. {
  28. echo "<tr><td width='32%'><font color='red'>".$fetch3['naam']."</font></td><td width='32%'>".$fetch3['level']."</td><td width='32%'>".$fetch3['mp']."</td></tr>";
  29. }
  30.  
  31. echo "</table>";
  32. ?>



En $fetch['duel_level is']:

  1. <?php
  2. $query = "SELECT `hash`, `duel_level` FROM `leden` WHERE `gebruikersnaam`='".$_COOKIE['gebruikersnaam']."'";
  3. $result = mysql_query($query) or die(mysql_error());
  4. $fetch = mysql_fetch_array($result);
  5. ?>


Alleen als ik m'n level op 45 zet (kan ik de hoogste spreuk) staan de spreuken van levelk 5, 7, 8 in het rood, terwijl mijn level wel duidelijk hoger is. En als ik het op 11 zet wordt alles groen, terwijl dit ook niet kan.

Hoe komt dit?

14 antwoorden

Gesponsorde links
Offline Gerard - 06/08/2005 22:02
Avatar van Gerard Ouwe rakker waarom haal je niet in 1 query alle rijen op van de spreuken en kijk je later in je php ofdat het lager/gelijk of hoger als jouw level is.

dan kan je je code ook weer een stukje kleiner maken, wordt dat ook weer wat overzichtelijker.
Offline Voldemort - 06/08/2005 22:03 (laatste wijziging 06/08/2005 22:18)
Avatar van Voldemort PHP ver gevorderde Dan moet ik toch erg veel ifjes, elseifjes en elsejes zetten? Hoe doe ik het dan?
Offline TFOL - 06/08/2005 23:32
Avatar van TFOL PHP beginner je zou ipv die ifjes en elsjes ook switch kunnen gebruiken;-) 
Offline Voldemort - 07/08/2005 11:07
Avatar van Voldemort PHP ver gevorderde Hoe werkt switch dan?

Kan je ff een stukje neerzetten die het resultaat geeft wat ik wil?
Offline Thomas - 07/08/2005 11:14 (laatste wijziging 07/08/2005 11:16)
Avatar van Thomas Moderator Hoe zijn je levels opgeslagen in je database ? Als VARCHAR (text) ? Dat zou namelijk je resultaten wel verklaren denk ik.
Offline Voldemort - 07/08/2005 11:19
Avatar van Voldemort PHP ver gevorderde Als CHARS(2).
Offline Legolas - 07/08/2005 11:21
Avatar van Legolas Onbekend Bedoel je CHAR(2)?
CHARS(2) bestaat niet:)
Beter is TINYINT(1) en dan kijken of hij op 0 of 1 staat;-)
Offline Voldemort - 07/08/2005 11:29
Avatar van Voldemort PHP ver gevorderde Ja, CHAR(2) bedoel ik.

Ik combineer 2 tabellen, dus dat is nogal lastig om int's aan te geven, ik gebruik die waarden ook nog voor andere dingen, dus ze aanpassen kan ik niet.

Offline Thomas - 07/08/2005 11:40 (laatste wijziging 07/08/2005 11:40)
Avatar van Thomas Moderator Ah kijk - daar ligt het dus aan. De string "5" komt alfabetisch gezien na "4", maar ook na "45" - daarom gaat het mis. Bij het vergelijken van twee strings worden eerst de eerste karakters van beide strings vergeleken met elkaar (en hier wordt dan op gesorteerd), dan de tweede karakter et cetera.

Als je dus de getallen 5, 7, 8 en 45 als string opslaat en oplopend sorteert, krijg je de volgende rij:

45
5
7
8
Offline Voldemort - 07/08/2005 11:41
Avatar van Voldemort PHP ver gevorderde Hoe los ik het dan op?
Offline Thomas - 07/08/2005 11:44 (laatste wijziging 07/08/2005 11:44)
Avatar van Thomas Moderator Lijkt me duidelijk - opslaan als getal (INT) of wanneer dit echt niet gaat in je query aangeven dat een string toch stiekem een getal is (dus een soort van typecast doen - weet niet of dit kan trouwens, maar netter is dus een getal opslaan als een getal ).
Offline Voldemort - 07/08/2005 11:49 (laatste wijziging 07/08/2005 11:51)
Avatar van Voldemort PHP ver gevorderde Nu doet ie het. Ik heb hem opgeslaan als tinyint(2).

Alleen in het begin van dit topic zeiden ze dat ik het in 1 query kon doen en dan iets met switch. Hoe doe ik dat dan in 1 query om hetzelfde resultaat te bekomen?
Offline Thomas - 07/08/2005 11:53 (laatste wijziging 07/08/2005 11:58)
Avatar van Thomas Moderator Mwa, het kan ook prima met 2 queries - een if-statement in een while zou dan beter zijn dan een switch denk ik, omdat je maar 2 mogelijkheden hebt - hiervoor hoef je geen gebruik te maken van een switch imo.

Om je strings als nummers te sorteren gebruik je het volgende in je query (typecasting):

  1. $query = "SELECT `naam`, `level`, `mp` FROM `spreuken` WHERE CAST(`level` AS SIGNED) <= ".$fetch['duel_level']


(let op - géén quotes om $fetch['duel_level'] !!!)

En zo ook voor > 45.

EDIT: CAST() (en CONVERT()) werken pas vanaf MySQL v4.0.2.
Als je MySQL versie ouder is zul je in PHP moeten sorteren - dan zou je aan één query voldoende hebben.
Offline Voldemort - 07/08/2005 11:55 (laatste wijziging 07/08/2005 16:20)
Avatar van Voldemort PHP ver gevorderde Ik heb op sommige pagina's 10 queries ==> veel dataverkeer verbruik ==> kost meer ==> ook tragere pagina's.

In het begin zeiden ze dat ik alles in 1 query kon doen, hoe zet ik dat dan in 1 query?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.21s