Avatar billede mikkels Nybegynder
06. november 2003 - 10:11 Der er 22 kommentarer og
1 løsning

ORDER BY fungere ikke med flere parametre ved UNION ALL

Hej

Jeg har et problem med sortering af et resultat efter at have lavet SELECTs med UNION. Problemet er at resultatet kun bliver sorteret i forhold til det første parameter (para1). Og meningen er jo at der skal sorteres efter ALLE 5 parametre... Er det en begrænsning i MySQLs UNION?

Eks.:

"(SELECT * FROM $tabel1) UNION ALL (SELECT * FROM $tabel2) UNION ALL (SELECT * FROM $tabel3) ORDER BY para1,para2,para3,para4,para5"


Håber på et godt svar.
/Mikkel
Avatar billede erikjacobsen Ekspert
06. november 2003 - 10:22 #1
order by para1,para2

betyder: sorter efter feltet para1 voksende. Hvis 2 felter er ens,
bruges så para2 til at at bestemme rækkefølgen.

Det er nok ikke det du vil ;) Så hvad er det du vil opnå?
Avatar billede mikkels Nybegynder
06. november 2003 - 10:30 #2
Jo - jeg vil netop først sortere efter para1, derefter para2 etc...
Avatar billede erikjacobsen Ekspert
06. november 2003 - 10:35 #3
kan du give et eksempel på hvad der går galt ?
Avatar billede mikkels Nybegynder
06. november 2003 - 11:14 #4
Som du kan se af nedenstående så mixer den ikke resultaterne fra de forskellige tabeller....:


--------------------------------
| Para1 |  Para2  |  Para3  |
--------------------------------
|  L  |  RH-512  |  Lavendel |  <- fra tabel 1
--------------------------------
|  XL  |  RH-512  |  Lys Blå  |  <- fra tabel 1
--------------------------------
|  XL  |  RH-512  |  Hvid    |  <- fra tabel 2
--------------------------------
|  XL  |  RH-512  |  Marine  |  <- fra tabel 2
--------------------------------
|  M  |  RH-512  |  Lys Blå  |  <- fra tabel 3
--------------------------------
|  XXL  |  RH-512  |  Hvid    |  <- fra tabel 3
--------------------------------
|  S  |  RH-512  |  Lyse Rød |  <- fra tabel 4
--------------------------------
|  L  |  RH-512  |  Lyse Rød |  <- fra tabel 4
--------------------------------
|  L  |  RH-512  |  Lavendel |  <- fra tabel 4
--------------------------------
Avatar billede solom Nybegynder
06. november 2003 - 13:49 #5
er det muligt at se hvordan dine tabeller er opbygget, og hvilket resultat du ønsker at få ud?
Avatar billede mikkels Nybegynder
06. november 2003 - 14:02 #6
Tabellerne ligner ovenstående - dvs de er ens, bortset fra indholdet der kan variere lidt. Hver tabel repræsenterer en ordre, og det jeg gerne vil have ud er en samlet liste over vare i alle ordre - MEN listen skal være sorteret så varerne kommer i rækkefølge efter type, farve og størrelse.

(jeg har een løsning hvor jeg kopiere alle tabellernes indhold over i en midlertidig tabel, hvorfra jeg så kan hive det hele ud med en enkelt SELECT og samtidig sortere det som ønsket, men jeg ville gerne have det til at virke med UNION istedet.)
Avatar billede solom Nybegynder
06. november 2003 - 14:12 #7
det er noget nemmere at have to tabeller en med ordre og en med ordre linier, så slipper du for alle disse unions :)

og så slipper du også for at oprette en ny tabel hver gang der oprettes en ny ordre.
Avatar billede mikkels Nybegynder
06. november 2003 - 14:20 #8
Ja - men i det aktuele tilfælde er det mere overskueligt med enkelttabeller for hver ordre...
OG under alle omstændigheder vil jeg gerne have den der UNION til at virke ordentlig med sorteringen...
Avatar billede solom Nybegynder
06. november 2003 - 15:18 #9
med tanke på hvor meget union kræver af databasen, er det nok den bedste løsning med en temporary tabel..
Avatar billede erikjacobsen Ekspert
06. november 2003 - 18:39 #10
Du skal vist bare sætte en ekstra parantes:

"((SELECT * FROM $tabel1) UNION ALL (SELECT * FROM $tabel2) UNION ALL (SELECT * FROM $tabel3)) ORDER BY para1,para2,para3,para4,para5"
Avatar billede mikkels Nybegynder
06. november 2003 - 22:08 #11
Nej - det dur ikke. Jeg får en fejl hvis jeg sætter de foreslåede paranteser...
Avatar billede erikjacobsen Ekspert
07. november 2003 - 06:24 #12
Det er vist rigtigt i mysql. Du skal faktisk

(SELECT * FROM $tabel1 order by para1) UNION ALL (SELECT * FROM $tabel2 order by para1) UNION ALL (SELECT * FROM $tabel3 order by para1) ORDER BY para1,para2,para3,para4,para5
Avatar billede mikkels Nybegynder
07. november 2003 - 09:31 #13
Hmm - virker ikke for mig. Der bliver stadig ikke sorteret rigtigt...
Avatar billede erikjacobsen Ekspert
07. november 2003 - 18:53 #14
Jeg testede det selv - hvilken version af MySql bruger du?
Avatar billede mikkels Nybegynder
10. november 2003 - 19:00 #15
MySQL 4.0.16 - det burde være den nyeste og burde derofr også virke... øv..
Avatar billede erikjacobsen Ekspert
10. november 2003 - 19:09 #16
Ok - hvad sker der præcis, og hvad skriver du. Vi skal da klaret det her.
Avatar billede mikkels Nybegynder
10. november 2003 - 19:12 #17
Jeg skriver:
(SELECT * FROM a23437500 ORDER BY modelnavn) UNION ALL (SELECT * FROM a24566650 ORDER BY modelnavn) UNION ALL (SELECT * FROM a26565551 ORDER BY modelnavn) UNION ALL (SELECT * FROM a45904541 ORDER BY modelnavn) UNION ALL (SELECT * FROM a91683959 ORDER BY modelnavn) UNION ALL (SELECT * FROM a95486450 ORDER BY modelnavn) ORDER BY modelnavn,modelvariation,farve,modelspeciel,str
Avatar billede erikjacobsen Ekspert
10. november 2003 - 19:17 #18
Det var en hamper een ;)  Syntaks fejl, eller sorterer den forkert?
Avatar billede mikkels Nybegynder
10. november 2003 - 22:42 #19
Erikjacobsen -> Jeg har nu fået løst problemet :-)  - problemet var min senere "bearbejdning" af resultatet vha. PHP. Den var lidt forkert og jeg troede derfor det var UNION ALL der var fejlen
Men tak for hjælpen - og smid lige et svar så du kan få pointene :-)
/Mikkel
Avatar billede erikjacobsen Ekspert
10. november 2003 - 22:51 #20
ok da - der er jo næsten altid en løsning ;)  Bemærk dog at når du skifter
MySql næste gang vil der måske være en ændring på netop dette område. Du burde
kunne gøre som i mit første forslag.
Avatar billede erikjacobsen Ekspert
10. november 2003 - 22:51 #21
.
Avatar billede mikkels Nybegynder
10. november 2003 - 22:56 #22
Ok - det må jeg lige holde øje med - Tak for det.
Avatar billede grace45 Nybegynder
22. oktober 2010 - 18:24 #23
Hej min kære,
Hvordan har du i dag, jeg håber, at alle er godt med dig. Jeg er ked af at bekymre dig med min Forslag til et forhold med dig, men jeg ved, at du vil imødekomme min anmodning i god tro og forståelse. Jeg har brug for dig i forretningsbetingelser og rådgive. Mit navn er Grace Dabah jeg bare gik gennem din profil har ingen andre muligheder end at lade dig vide, at jeg er interesseret i at have et forhold med dig, vil jeg også gerne vide dig mere, kan du sende en mail til min e-mail adresse (grace_11dabah @ yahoo.com), så jeg kan sende dig flere oplysninger om mig selv inklusive mit billede. Jeg tror, vi kan gå herfra. Men huske på, at kærlighed ikke har nogen farver barriere, ingen uddannelsesmæssige tilbage jorden barriere, ingen socio-økonomiske barrierer, religiøse, sprog, nationalitet eller afstand hindring, det eneste vigtige der er kærlighed. Jeg venter på din mail til min e-mail adresse ovenfor.
Med venlig hilsen,
Miss Grace.
grace12.JPG (91KB, 336 x 576)
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
Computerworld tilbyder specialiserede kurser i database-management

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