login  Naam:   Wachtwoord: 
Registreer je!
 Forum

sorteren

Offline roy - 13/02/2005 18:15 (laatste wijziging 13/02/2005 20:05)
Avatar van royPHP gevorderde hallo,

ik heb de volgende query:

  1. <?PHP
  2. $query="SELECT * FROM `tabelnaam` WHERE ".$uniekveld."='".$basename."' AND Round='".$round."' ORDER BY Ts,Tm,Th";
  3. ?>


zoals je ziet is het de bedoeling dat hij op drie kolommen sorteerd, dat gebeurd helaas niet.

Zit de query wel goed in elkaar? weet iemand een manier waarop het wel werkt.

17 antwoorden

Gesponsorde links
Offline matthias - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van matthias PHP interesse [code]PHPrn$query=SELECT FROM `tabelnaam` rnWHERE .$uniekveld.='.$basename.' rnAND Round='.$round.' rnORDER BY rn Ts DESC, rn Tm DESC ,rn Th DESC;rn [code]
Offline roy - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van roy PHP gevorderde Ik heb het geprobeerd maar het werkt niet(
Offline matthias - 30/11/1999 00:00
Avatar van matthias PHP interesse Krijg je een mysql error of iets in die richtingrnOf sorteert hij niet naar jou wensenrn
Offline roy - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van roy PHP gevorderde hij sorteerd helemaal niet, ik heb het ook geprobeerd op 1 kolomS (en ik krijg geen foutmelding, hij toont wel de resultaten)rnrnIn de kolommen waarop gesorteerd moet worden staan getallenrndit is het hele scriptrnrn[code]rnPHPrnfunction uitlezen($dir){ rn$uitlees=opendir($dir); rn$bestanden=array(); rnwhile(($dit_bestand = readdir($uitlees))!==false){ rn$bestanden[] = $dit_bestand; rn} rnclosedir($uitlees); rnreturn $bestanden; rn} rnrnecho ik haal alle bestanden op uit ,$eindlocatie, br;rnrn$arree = uitlezen($eindlocatie);rn$bestanden = uitlezen($eindlocatie); rnforeach ($arree as $url) { rn$basename = basename($url); is de bestandsnaam!rnrn$query=SELECT FROM `tacx` WHERE .$uniekveld.='.$basename.' AND Round='.$round.' ORDER BY Ts ASC, Tm ASC, Th ASC;rnrnnu worden de gegevens geselecteerd en ze worden gerangschikd op id dus nieuw komt eerst rn $sql=mysql_query($query) or die (mysql_error()); rnrn while ($obj=mysql_fetch_object($sql)) { rn $id = $obj-user; rn $Dd = $obj-Dd; rn $Dm = $obj-Dm; rn $Dy = $obj-Dy; rn $Th = $obj-Th; rn $Tm = $obj-Tm; rn $Ts = $obj-Ts;rn rn $query=SELECT FROM `gebruikers` WHERE id='.$id.'; rnnu worden de gegevens geselecteerd en ze worden gerangschikd op id dus nieuw komt eerst rn $sql=mysql_query($query) or die (mysql_error()); rnrn while ($obj=mysql_fetch_object($sql)) { rn $name = $obj-naam; rn $country = $obj-country;rnrn trrn td width=10%php echo $i; tdrn td width=10% echo $Dd; - echo $Dm; - echo $Dy; tdrn td width=10%PHP echo .$name.; tdrn td width=10%img src= echo $country border=0 align=centertdrn td width=10% echo $Th; echo $Tm; echo $Ts; tdrn td width=10%&nbsp;tdrn td width=10%&nbsp;tdrn td width=10% echo $Th; echo $Tm; echo $Ts; tdrn td width=10%PHP echo $h; tdrn td width=10%PHP echo $h; tdrn trrnrnrn php rn $i++; rn $h--;1 tot 5 rn} rnrnrn}rnrnrn}rnrn tablern centerrndivrnrn[code]rnrnweet iemand hoe ik wel kan sorteren
Offline numlockrond - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van numlockrond Onbekend dat script ziet er niet goed uit. Een aantal dingen die meteen opvallenrnrn- je springt (bijna) niet in, dat maakt het onoverzichtelijkrn- waarom plak je hier 2 lege strings aan de variabele bij het echoën Heeft geen zin.rn[code]PHP echo .$name.; [code]rn- de resultaten van het query resultaat $sql wil je in een while weergeven. In die while kopieer je eerst allerlei variabelen, wat ook geen zin heeft. Daarna overschrijf je $sql met een nieuwe query, waardoor de 1e while maar 1x uitgevoerd wordt. Je zult je variabelen dus andere namen moeten geven.rn[edit]ik lette niet zo goed op. Bij je 2e query wil je maar 1 rij ophalen, dus hoef je geen while te gebruiken.[edit]rnrnVerder weet ik niet of dit de beste manier is. Ipv bij elk record de naam en het land van de gebruiker op te halen met een andere query zou je ook een join kunnen gebruiken, of beter een subquery. Subquery worden echter alleen ondersteund door de nieuwste mysql versie(s) (4.1 dacht ik).
Offline roy - 30/11/1999 00:00
Avatar van roy PHP gevorderde Wat betreft de netheid, heb je gelijk, maar dat mag geen invloed op het sorteren hebben..rnrndie 2 strings zijn weg..rnrnOok als ik de tweede query weghaal kan er niet gesorteerd worden s op geen enkele kolom
Offline numlockrond - 30/11/1999 00:00
Avatar van numlockrond Onbekend je zegt kan er niet gesorteerd worden maar je zegt ook dat je geen error krijgt van mysql.rnrnWelke rijen heb je precies in je tabel, in welke volgorde worden ze nu geselecteerd en hoe zou je het willen hebben
Offline roy - 30/11/1999 00:00
Avatar van roy PHP gevorderde [b]rijen in de tabel[b]rnrnvelden eerste rijtweede rijrnid 46 47 rnuser 11 12 rnDd 01 01 rnDm 01 01rnDy 2002 2002rnTh 00 00rnTm 05 04rnTs 15 00rnRound Round 9 Round 9 rnrn[b]Zo komen ze nu[b]rn01-01-2002 000515 rn01-01-2002 000400 rn rn[b]Zo moeten ze komen[b]rn01-01-2002 000400 (snelste eerst)rn01-01-2002 000515 rnrnrnNu zijn het maar twee rijen, uiteindelijk moeten het er veel meer worden.
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas Moderator Euh, MySQL weet wel hoe die moet sorteren, jij waarschijnlijk niet... Wil je eerst op seconden sorteren, dan op minuten en dan op uren Ik denk dat je het juist andersom wilt doen rnrnMySQL sorteert standaard oplopend (ASC).rnrnHet moet dus zijnrnORDER BY Th, Tm, Ts
Offline roy - 30/11/1999 00:00
Avatar van roy PHP gevorderde dat heb ik gedaan, maar hij blijft gewoon in de oude volgorde staan
Offline Tuinstoel - 30/11/1999 00:00
Avatar van Tuinstoel PHP expert Ehm round is volgensmij een gereserveerd woord lijkt me,rnrn[code]SELECT FROM `tabelnaam` rnWHERE `.$uniekveld.` = '.$basename.' rnAND `Round` = '.$round.'rn ORDER BY `Ts`,`Tm`,`Th`[code]
Offline roy - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van roy PHP gevorderde dat dacht ik ook, maar het werkt niet....rn rnmijn Scriptrnrn[code]rnPHPrn$tabelnaam = tacx; naam van de tabelrn$origineelveld = origineel; naam van de velden in je tabelrn$uniekveld = uniek; naam van de velden in je tabelrn$mimeveld = mime; naam van de velden in je tabelrn$i = 1; rn$h = 75;rnvolgende var is het pad waar alles wordt opgeslagen.rn$eindlocatie = $_SERVER['DOC_ROOT'].varwwwhtmlChrisfilestacx; echo deze variabele als je niet zeker bent!rnrnrnrnrnfunction uitlezen($dir){ rn$uitlees=opendir($dir); rn$bestanden=array(); rnwhile(($dit_bestand = readdir($uitlees))!==false){ rn$bestanden[] = $dit_bestand; rn} rnclosedir($uitlees); rnreturn $bestanden; rn} rnrnecho ik haal alle bestanden op uit ,$eindlocatie, br;rnrnrn$arree = uitlezen($eindlocatie);rn$bestanden = uitlezen($eindlocatie); rnforeach ($arree as $url) { rn$basename = basename($url); is de bestandsnaam!rnrn$query=SELECT FROM `tacx` WHERE .$uniekveld.='.$basename.' AND Round='.$round.' ORDER BY Th, Tm, Ts DESC; rnnu worden de gegevens geselecteerd en ze worden gerangschikd op id dus nieuw komt eerst rn $sql=mysql_query($query) or die (mysql_error()); rnrn while ($obj=mysql_fetch_object($sql)) { rn $did = $obj-user; rn $Dd = $obj-Dd; rn $Dm = $obj-Dm; rn $Dy = $obj-Dy; rn $Th = $obj-Th; rn $Tm = $obj-Tm; rn $Ts = $obj-Ts;rn rn $query=SELECT FROM `gebruikers` WHERE id='.$did.'; rnnu worden de gegevens geselecteerd en ze worden gerangschikd op id dus nieuw komt eerst rn $sql=mysql_query($query) or die (mysql_error()); rnrn while ($obj=mysql_fetch_object($sql)) { rn $name = $obj-naam; rn $country = $obj-country;rnrn trrn td width=10%php echo $i; tdrn td width=10% echo $Dd - echo $Dm - echo $Dy tdrn td width=10%PHP echo a href=pagesbestand.phpbestand=.stripslashes($basename)..$name.abr; tdrn td width=10%img src= echo $country border=0 align=centertdrn td width=10% echo $Th echo $Tm echo $Ts tdrn td width=10%&nbsp;tdrn td width=10%&nbsp;tdrn td width=10% echo $Th echo $Tm echo $Ts tdrn td width=10%PHP echo $h;; tdrn td width=10%PHP echo $h;; tdrn trrnrn php rn $i++; rn $h--;1 tot 5 rn} rnrnrn}rnrnrn}rnrn tablern centerrndiv[code]
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas Moderator [quote]MySQL sorteert standaard oplopend (ASC).[quote]rnAls je de [b]oudste[b] entries bovenaan wilt hebben staan zul je DESCending (aflopend) moeten sorteren op jaar, (èn aflopend) op maand, (èn aflopend) op dag, (èn aflopend) op uur, (èn aflopend) op minuut en (aflopend) op seconden (in die volgorde!)...rnOmdat [i]nieuwere[i] entries ook automatisch een hoger id hebben, zou je ook (in plaats van de hele bovenstaande zooi) AFlopend kunnen sorteren op id... dus gebruik ORDER BY id [b][u]DESC[u][b].rnrnNB Zoals ik al zei sorteert MySQL standaard [u]op[u]lopend - wil je op één of meer attributen [u]af[u]lopend sorteren, zul je voor [b]elk[b] element aan moeten geven dat dit aflopend dient te gebeuren... Het moet dus waarschijnlijk niet ORDER BY Th, Tm, Ts [b]DESC[b] zijn zoals ik hierboven zag, maar ORDER BY Th [b]DESC[b], Tm [b]DESC[b], Ts [b]DESC[b] - en dan heb je nog geen rekening gehouden met dag, maand en jaar, maar het kan dus simpeler, met behulp van id.
Offline roy - 30/11/1999 00:00
Avatar van roy PHP gevorderde ik begrijp wel hoe het werkt, ik weet denk ik ook waarom het bij mij fout gaat.rnrnHet komt omdat hij die directory uitleest. Als ik dat stuk script weghaal dan werkt het wel, maja dat is nou net een belangrijk stuk script.rnrnHoe kan ik ervoor zorgen dat hij toch de directory uitleest en sorteert gaat zover ik heb geprobeerd niet met een include.rn
Offline Thomas - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van Thomas Moderator Heb je al eens gekeken naar wat $arree inhoudt rnDit zou ik eerst eens doen. $arree levert ook de bestanden . en .. op, en ook subfolders (zo die er zijn) - deze kun je sowieso weglaten Hierna zou je eens kunnen kijken naar elk (geldig) bestand, en de hierbij behorende query. Doorloop deze stuk voor stuk (of in ieder geval een paar) om te kijken waar het fout gaat.rnrnScheid dus je probleem in stukken, en kijk bij elk stuk of er zich problemen voordoen. Maak het voor jezelf gemakkelijk.
Offline roy - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van roy PHP gevorderde $arree geeft de bestandsnamen die in die directory staan (3465236, 65436345, 3465534) waarbij later de originele bestand naam over wordt gezet.rnrnja het zijn allemaal geldige bestanden, zonder het sorteren krijg ik gewoon de resultaten maar niet in mijn gewenste volgorde.
Offline Thomas - 30/11/1999 00:00
Avatar van Thomas Moderator De folders van de gebruikers zijn getallen die als string zijn opgeslagen, en die je als getal wilt ordenen
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.226s