Avatar billede cow2 Nybegynder
13. november 2006 - 23:50 Der er 20 kommentarer og
2 løsninger

ORDER BY virker ikke mere sammen med UNION

(SELECT * FROM produkter WHERE gruppe = '$kid' && titel LIKE 'blomster%' ORDER by titel DESC) UNION (SELECT * FROM produkter WHERE gruppe = '$kid' && titel NOT LIKE 'blomster%' ORDER by titel DESC);

men det virker ikke mere, ORDER by titel DESC ? hvorfor virker det ikke ?
Avatar billede coderdk Praktikant
14. november 2006 - 00:28 #1
(SELECT * FROM produkter WHERE gruppe = '$kid' && titel LIKE 'blomster%')
UNION
(SELECT * FROM produkter WHERE gruppe = '$kid' && titel NOT LIKE 'blomster%')
ORDER by titel DESC;
Avatar billede cow2 Nybegynder
14. november 2006 - 00:34 #2
Har jeg prøvet, men så kommer alle titler med blomster ikke til at stå først
Avatar billede coderdk Praktikant
14. november 2006 - 01:02 #3
Aaaah på den måde... Ja, så burde din faktisk virke... Prøv at skrive UNION ALL for lige at se (burde nu ikke være det)
Avatar billede coderdk Praktikant
14. november 2006 - 01:05 #4
Nej vent... Er det ikke noget med at du skal angive feltnavne?

(SELECT felt1, felt2 FROM produkter WHERE gruppe = '$kid' && titel LIKE 'blomster%' ORDER by titel DESC)
UNION
(SELECT felt1, felt2 FROM produkter WHERE gruppe = '$kid' && titel NOT LIKE 'blomster%' ORDER by titel DESC);

?
Avatar billede arne_v Ekspert
14. november 2006 - 03:19 #5
alternativt approach:

SELECT *,IF(titel LIKE 'blomster%',1,0) AS startblomst
FROM produkter
WHERE gruppe = '$kid'
ORDER BY startblomst,titel
Avatar billede clausga Nybegynder
14. november 2006 - 12:12 #6
UNION ALL giver ikke nogen forskel

sådan ser den faktisk ud:

mysql_query("(SELECT *, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE grupppe = '$kid' && titel LIKE 'blomster%' ORDER BY titel) UNION ....

grunden til jeg bruger * er at jeg trækker mange felter ud, men burde jeg skrive alle felter istedet ?
Avatar billede coderdk Praktikant
14. november 2006 - 12:21 #7
Det er "god form" at angive alle de felter man hiver ud ;) Du kan evt. starte med bare at angive to-tre felter, og se om du får det ønskede resultat - ellers kan du prøve arne_v's løsning :)
Avatar billede cow2 Nybegynder
14. november 2006 - 12:33 #8
hov fik vist skrevet fra min vens konto før, beklager...hvordan får jeg dem sat ind foran her:

mysql_query("(SELECT titel,id, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE grupppe = '$kid' && titel LIKE 'blomster%' ORDER BY titel) UNION .... <- det er vel ikke sådan ?

og hvad med arne_v's eksempel

SELECT *,IF(titel LIKE 'blomster%',1,0) AS startblomst SÅ hvordan får jeg CONCAT(LEFT(info, 150), '...') AS short FROM ind i den ?
Avatar billede coderdk Praktikant
14. november 2006 - 12:45 #9
Jo, og:

SELECT titel, id, CONCAT(LEFT(info, 150), '...') AS short, IF(titel LIKE 'blomster%',1,0) AS startblomst FROM produkter
WHERE gruppe = '$kid'
ORDER BY startblomst,titel
Avatar billede arne_v Ekspert
14. november 2006 - 12:52 #10
det er iøvrigt muligt at MySQL vil have

... ORDER BY IF(titel LIKE 'blomster%',1,0),titel
Avatar billede cow2 Nybegynder
14. november 2006 - 12:53 #11
det virker stadig ikke med arne_v's eksempel, alt med blomster kommer stadig ikke øverst
Avatar billede cow2 Nybegynder
14. november 2006 - 12:57 #12
hvis jeg sætter ,titel - så kommer alt med blomster øverst - men den sortere stadig ikke lige som den gjorde før med ORDER by titel DESC

der gik kuk i den da vi skiftede database, fra en ældre version at MySQL til en NY.
Avatar billede cow2 Nybegynder
14. november 2006 - 12:58 #13
arne v hvor skal jeg sætte den ORDER BY IF i slutningen ? eller begge steder ?
Avatar billede arne_v Ekspert
14. november 2006 - 13:08 #14
prøv lige:

SELECT titel, id, CONCAT(LEFT(info, 150), '...') AS short, IF(titel LIKE 'blomster%',1,0) AS startblomst FROM produkter
WHERE gruppe = '$kid'
ORDER BY IF(titel LIKE 'blomster%',1,0) DESC,titel
Avatar billede cow2 Nybegynder
14. november 2006 - 13:20 #15
nej stadig ikke, blomster er stadig øverst men ikke i rigtige rækkefølge.

hvis man har disse titler sådan her blev de sorteret før med ORDER by titel DESC og sådan skal de sorteres igen:

blomster DVD-S97
blomster DVD-S52
blomster DVD-S42
blomster DVD-S1

men nu bliver de:

blomster DVD-S1
blomster DVD-S97
blomster DVD-S52
blomster DVD-S42
Avatar billede cow2 Nybegynder
14. november 2006 - 13:50 #16
så nu tror jeg sku det virker, der manglede bare lige en DESC :) sådan her skal den være:

SELECT titel, id, CONCAT(LEFT(info, 150), '...') AS short, IF(titel LIKE 'blomster%',1,0) AS startblomst FROM produkter
WHERE gruppe = '$kid'
ORDER BY IF(titel LIKE 'blomster%',1,0) DESC,titel DESC


men jeg fatter stadig ikke hvorfor det ikke virker efter vi skiftede til en nyere version af MySQL, der må være blevet lavet nogle andre regler...
Avatar billede cow2 Nybegynder
14. november 2006 - 13:55 #17
det virker også selvom jeg sletter  IF(titel LIKE 'blomster%',1,0) AS startblomst inde mit i SQL'en så det kan jeg vel lige så godt ?
Avatar billede coderdk Praktikant
14. november 2006 - 13:57 #18
Yep, den skal du ikke bruge til noget - Du skal kun bruge den i din ORDER BY :)
Avatar billede cow2 Nybegynder
14. november 2006 - 14:04 #19
Arne V smid lige et svar - i fortjener begge point i har været en STOR hjælp :)
Avatar billede coderdk Praktikant
14. november 2006 - 14:29 #20
Giv arne størstedelen :)
Avatar billede arne_v Ekspert
14. november 2006 - 15:11 #21
ok

IF var i SELECT listen fordi jeg troede at man kunne ORDER BY paa alias og det kan man vist ikke
Avatar billede cow2 Nybegynder
14. november 2006 - 15:22 #22
endnu engang tak for hjælpen ;)
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

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