Avatar billede mjl Nybegynder
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
Avatar billede mjl Nybegynder
21. august 2004 - 16:54 #1
Hæver lige points fra 60 til 100
Avatar billede mjl Nybegynder
21. august 2004 - 17:03 #2
...er der ingen der har tid, eller er mit sp. det rene vrøvl???
Avatar billede dennismp Nybegynder
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
Avatar billede mjl Nybegynder
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....
Avatar billede mjl Nybegynder
21. august 2004 - 17:16 #5
Resultatet fra både komp_et og komp_to skal blandes sammen, og sorteres alfabetisk!
Avatar billede dennismp Nybegynder
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
Avatar billede dennismp Nybegynder
21. august 2004 - 17:21 #7
(kræver mysql 4.0.0+)
Avatar billede dennismp Nybegynder
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.
Avatar billede mjl Nybegynder
21. august 2004 - 17:26 #9
...virker ikke - måske er der en ældre MySQL på serveren.
Avatar billede mjl Nybegynder
21. august 2004 - 17:27 #10
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
Avatar billede mjl Nybegynder
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!?
Avatar billede dennismp Nybegynder
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());
Avatar billede dennismp Nybegynder
21. august 2004 - 17:38 #13
hvis ikke, så skal vi se på array-sortering :)
Avatar billede mjl Nybegynder
21. august 2004 - 17:41 #14
MySQL server version: 3.23.57
Avatar billede dennismp Nybegynder
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 />";
}
?>
Avatar billede mjl Nybegynder
21. august 2004 - 17:46 #16
Ser godt ud, den har det hele med, dog ikke alfabetisk :(
Avatar billede dennismp Nybegynder
21. august 2004 - 17:49 #17
Hvordan har den så sorteret dem?

prøv evt med

sort($liste,SORT_STRING);
Avatar billede mjl Nybegynder
21. august 2004 - 17:51 #18
Kan det være fordi den ikke ignorerer forskel mellem store og små bogstaver?
Avatar billede mjl Nybegynder
21. august 2004 - 17:52 #19
...og hvad med æøå?
Avatar billede dennismp Nybegynder
21. august 2004 - 17:57 #20
prøv at sætte setlocale('danish','da_DK'); ind
Avatar billede dennismp Nybegynder
21. august 2004 - 17:57 #21
før du sorterer
Avatar billede dennismp Nybegynder
21. august 2004 - 18:00 #22
altså - jeg går snart iseng :(
setlocale(LC_ALL, 'danish','da_DK');
Avatar billede mjl Nybegynder
21. august 2004 - 18:01 #23
Warning: Wrong parameter count for setlocale() in
Avatar billede mjl Nybegynder
21. august 2004 - 18:03 #24
...den sorterer store bogstaver først, derefter små, og til sidst æøå
Avatar billede dennismp Nybegynder
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 :-)
Avatar billede mjl Nybegynder
21. august 2004 - 18:04 #26
Warning: Wrong parameter count for setlocale() in

og...

Warning: Wrong datatype in usort() call in
Avatar billede dennismp Nybegynder
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.
Avatar billede dennismp Nybegynder
21. august 2004 - 18:06 #28
MAND :(

setlocale(LC_ALL, array('danish','da_DK)');
usort($liste,'strcoll');
Avatar billede dennismp Nybegynder
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 :(
Avatar billede mjl Nybegynder
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 æøå
Avatar billede dennismp Nybegynder
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 />";
?>
Avatar billede mjl Nybegynder
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] => Å )
Avatar billede dennismp Nybegynder
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 ?
Avatar billede mjl Nybegynder
21. august 2004 - 18:22 #34
Ja...samme....
Avatar billede dennismp Nybegynder
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');
Avatar billede mjl Nybegynder
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!
Avatar billede dennismp Nybegynder
21. august 2004 - 18:35 #37
Det gør skam ikke noget. Beklager roderiet - men jeg forvirrede dig vist ikke :}.
Avatar billede mjl Nybegynder
21. august 2004 - 18:38 #38
Din hjælp var kanon - TAK
Avatar billede mjl Nybegynder
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...
Avatar billede dennismp Nybegynder
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"];
Avatar billede mjl Nybegynder
21. august 2004 - 19:05 #41
Du er bare GULD - 10.000 gange tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester