Avatar billede jb00797 Nybegynder
23. december 2007 - 20:16 Der er 5 kommentarer og
1 løsning

Mysql select med flere order by

Hej

Jeg har denne select:
SELECT d.category, d.imageid, d.id, d.showto , i.id, i.views, d.id as theid  FROM designs as d, images as i WHERE d.showto = '1' AND d.imageid != '0' AND d.category = '0' AND d.imageid = i.id ORDER BY i.views DESC LIMIT 1

Jeg har 2 tabeller, og vil gerne hente ud sådan at der hentes ud fra dem hvor i.views er størst, men den dur ikke optimalt da der godt kan være flere rows i designs som har det samme images.id
så theid bliver ikke altid det samme fordi mysql åbentbart vælger en af dem tilfældigt? Hvordan kan jeg gøre sådan at jeg sortere dem sådan at theid altid bliver det samme, f.eks. den der er størst

Glædelig jul allesammen :)
Avatar billede erikjacobsen Ekspert
23. december 2007 - 21:05 #1
Du kan lave ORDER BY på flere kriterier. Muligvis, hvis jeg forstår dig ret:

  ... ORDER BY i.views DESC, d.id ASC LIMIT 1
Avatar billede jb00797 Nybegynder
23. december 2007 - 22:52 #2
Mange tak det virkede bare helt fint :)
Men så opstår der bare et andet problem, der kan godt være flere række i designs hvor imageid er lige med i.id men jeg vil gerne bare kun have 1 af dem, men ved ikke lige hvordan jeg skal gøre det. Kan jeg evt. gøre det med en group by og hvad skal jeg groupe dem efter?

Og erik læg lige et svar :)
Avatar billede erikjacobsen Ekspert
23. december 2007 - 22:58 #3
Jeg lægger ikke svar - jeg samler slet ikke på point.

Du har i øjeblikket en LIMIT 1 på, så du får ikke mere end een. Så jeg forstår ikke dit spørgsmål - kan du give et eksempel?
Avatar billede jb00797 Nybegynder
23. december 2007 - 23:07 #4
Okay bare i orden så :)

Ah ja okay det kræver nok lidt ekstra forklaring, jeg køre den samme query flere gange, hvor jeg så laver om i den sådan at der ikke kommer den samme row(d.id != "id'et på det design der lige er blevet hentet.") men så kommer der bare en ny row hvor d.imageid er det samme, fordi der er flere rows i designs der har samme imageid.
Avatar billede erikjacobsen Ekspert
23. december 2007 - 23:38 #5
Det er ikke ligefrem et eksempel - men du kan vel udelukke det på flere måder, fx i sql-sætningen "... AND d.imageid<>888..." eller ved at tage mere end een række ud " ... LIMIT 2", og så tage en række med et andet imageid, hvis der er mere end een.
Avatar billede jb00797 Nybegynder
06. maj 2009 - 11:12 #6
tid til at lukke
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