21. august 2004 - 16:40
Der er
40 kommentarer og 1 løsning
Hente flere rækker i MySQL men sortere dem sammen.
Hej der... Har lige et probs. Jeg har nogle rækker i MySQL, som jeg henter med PHP... <? $hent_komplet_liste = mysql_query("SELECT DISTINCT komp_en, komp_to FROM brugere"); while ($hent_komplet_liste_print = mysql_fetch_array($hent_komplet_liste)){ echo $hent_komplet_liste_print["komp_en"]."<br>"; echo $hent_komplet_liste_print["komp_to"]."<br>"; } ?> ...måske noget rod, men jeg henter altså alle unikke komp_en, komp_to o.s.v. men ønsker at resultaterne blandes, og sorteres alfabetisk - altså, så de kommer i alfabetisk rækkefølge, og ikke som nu, hvor komp_et'erne kommer i rækkefølge først, og derefter komp_to'erne......resultatet af det bliver jo noget i retning af; a b c d a b c d Jeg håber filme i kan forstå mit spørgsmål - :o) hilsen Conrad
Annonceindlæg fra Admin By Request
21. august 2004 - 16:54
#1
Hæver lige points fra 60 til 100
21. august 2004 - 17:03
#2
...er der ingen der har tid, eller er mit sp. det rene vrøvl???
21. august 2004 - 17:12
#3
Je er ikke sikker på at jeg forstår spørgsmålet, men prøv: SELECT DISTINCT komp_en, komp_to FROM brugere ORDER BY komp_en, komp_to
21. august 2004 - 17:14
#4
Tror du har forstået det rigtigt, men - den sorterer stadig komp_et først derefter komp_to... Res.: a b c d a b c d igen....
21. august 2004 - 17:16
#5
Resultatet fra både komp_et og komp_to skal blandes sammen, og sorteres alfabetisk!
21. august 2004 - 17:21
#6
et forsøg til :) SELECT komp_en FROM brugere UNION ALL SELECT komp_to FROM brugere ORDER BY 1
21. august 2004 - 17:21
#7
(kræver mysql 4.0.0+)
21. august 2004 - 17:22
#8
hov, hvis du skal undgå at den skriver a a b b ... så fjerner du bare "ALL" så der står UNION imellem de to sætninger.
21. august 2004 - 17:26
#9
...virker ikke - måske er der en ældre MySQL på serveren.
21. august 2004 - 17:27
#10
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
21. august 2004 - 17:29
#11
Kan man ikke hente de forskellige rækker, og blande dem i et array, der så sorteres alfabetisk, eller noget i den retning!?
21. august 2004 - 17:38
#12
Jo, men det er nemmere hvis du kunne lade sql gøre det for dig. Prøv: printf("MySQL server version: %s\n", mysql_get_server_info()); så får du at vide hvilken version du har. Hvis det er 4.0. så tilføje error-checks; mysql_query("SELECT ................... ") or die(mysql_error());
21. august 2004 - 17:38
#13
hvis ikke, så skal vi se på array-sortering :)
21. august 2004 - 17:41
#14
MySQL server version: 3.23.57
21. august 2004 - 17:43
#15
php løsning: <? $hent_komplet_liste = mysql_query("SELECT DISTINCT komp_en, komp_to FROM brugere"); $liste = array(); while ($hent_komplet_liste_print = mysql_fetch_array($hent_komplet_liste)){ $liste[] = $hent_komplet_liste_print["komp_en"]; $liste[] = $hent_komplet_liste_print["komp_to"]; } sort($liste); foreach($liste as $komp) { print "$komp<br />"; } ?>
21. august 2004 - 17:46
#16
Ser godt ud, den har det hele med, dog ikke alfabetisk :(
21. august 2004 - 17:49
#17
Hvordan har den så sorteret dem? prøv evt med sort($liste,SORT_STRING);
21. august 2004 - 17:51
#18
Kan det være fordi den ikke ignorerer forskel mellem store og små bogstaver?
21. august 2004 - 17:52
#19
...og hvad med æøå?
21. august 2004 - 17:57
#20
prøv at sætte setlocale('danish','da_DK'); ind
21. august 2004 - 17:57
#21
før du sorterer
21. august 2004 - 18:00
#22
altså - jeg går snart iseng :( setlocale(LC_ALL, 'danish','da_DK');
21. august 2004 - 18:01
#23
Warning: Wrong parameter count for setlocale() in
21. august 2004 - 18:03
#24
...den sorterer store bogstaver først, derefter små, og til sidst æøå
21. august 2004 - 18:03
#25
ok .. en gang til: <? $hent_komplet_liste = mysql_query("SELECT DISTINCT komp_en, komp_to FROM brugere"); $liste = array(); while ($hent_komplet_liste_print = mysql_fetch_array($hent_komplet_liste)){ $liste[] = $hent_komplet_liste_print["komp_en"]; $liste[] = $hent_komplet_liste_print["komp_to"]; } setlocale(LC_ALL, 'danish','da_DK'); usort($elements,'strcoll'); foreach($liste as $komp) { print "$komp<br />"; } ?> Nu går jeg altså iseng :-)
21. august 2004 - 18:04
#26
Warning: Wrong parameter count for setlocale() in og... Warning: Wrong datatype in usort() call in
21. august 2004 - 18:05
#27
en sortering (med usort) på array('b','A','z','c','Å','Æ','ø') giver mig: Array ( [0] => A [1] => b [2] => c [3] => z [4] => Æ [5] => ø [6] => Å ) Det ser da rigtig nok ud.
21. august 2004 - 18:06
#28
MAND :( setlocale(LC_ALL, array('danish','da_DK)'); usort($liste,'strcoll');
21. august 2004 - 18:06
#29
igen. <? $hent_komplet_liste = mysql_query("SELECT DISTINCT komp_en, komp_to FROM brugere"); $liste = array(); while ($hent_komplet_liste_print = mysql_fetch_array($hent_komplet_liste)){ $liste[] = $hent_komplet_liste_print["komp_en"]; $liste[] = $hent_komplet_liste_print["komp_to"]; } setlocale(LC_ALL, array('danish','da_DK')); usort($liste,'strcoll'); foreach($liste as $komp) { print "$komp<br />"; } ?> Sikke et rod :(
21. august 2004 - 18:08
#30
Nu melder den ikke fejl mere, men den sorterer stadig : store bogstaver først, derefter små, og til sidst æøå
21. august 2004 - 18:16
#31
Hvilket output får du hvis du laver en testfil, med disse linjer; <?php setlocale(LC_ALL,'danish'); $elements = array('b','A','z','c','Å','Æ','ø'); sort($elements); print "sort() "; print_r($elements); print "<br />"; usort($elements,'strcoll'); print "usort() "; print_r($elements); print "<br />"; ?>
21. august 2004 - 18:16
#32
sort() Array ( [0] => A [1] => b [2] => c [3] => z [4] => Å [5] => Æ [6] => ø ) usort() Array ( [0] => A [1] => b [2] => c [3] => z [4] => Æ [5] => ø [6] => Å )
21. august 2004 - 18:19
#33
Det er jo rigtigt (bemærk usort sortere fint..) Hvordan ser din kode ud nu? Det samme som mit i kommentar-18:06:55 ?
21. august 2004 - 18:22
#34
Ja...samme....
21. august 2004 - 18:25
#35
Hvilke værdier har komp_en og komp_to? Hvad sker der hvis du tager nogle af de værdier og sætter ind i $elements i din test-fil? Sorterer dem så stadig forkert? i din sorteringsfil prøv at rette: setlocale(LC_ALL, array('danish','da_DK')); til: setlocale(LC_ALL, 'danish');
21. august 2004 - 18:29
#36
Jeg havde nogle "for sjov" regs. f.eks. aaa og bbb og ccc - disse er nu ændret til alm. ord, og så kører det perfekt! Sorry...! Læg endelig et svar, så du kan få dine MEGET fortjente points!!! 1000 Tak!
21. august 2004 - 18:35
#37
Det gør skam ikke noget. Beklager roderiet - men jeg forvirrede dig vist ikke :}.
21. august 2004 - 18:38
#38
Din hjælp var kanon - TAK
21. august 2004 - 18:57
#39
Hvis du får tid (og har lyst) - hvorfor tager den også tomme felter med, altså hvis kom_to ikke indeholder noget, så laver den et linieskift i udprintet...
21. august 2004 - 19:01
#40
selvf. sorteringsrutiner er jo designet til at kunne bruges til alt muligt. Så de fjerne intet. Men det er nemt at komme om dit problem. disse linjer: $liste[] = $hent_komplet_liste_print["komp_en"]; $liste[] = $hent_komplet_liste_print["komp_to"]; kan rettes til: if( !empty($hent_komplet_liste_print["komp_en"]) ) $liste[] = $hent_komplet_liste_print["komp_en"]; if( !empty($hent_komplet_liste_print["komp_to"]) ) $liste[] = $hent_komplet_liste_print["komp_to"];
21. august 2004 - 19:05
#41
Du er bare GULD - 10.000 gange tak!
Vi tilbyder markedets bedste kurser inden for webudvikling