Kom ihåg mig?
Home Menu

Menu


SQL: Hur selecta när en lista med id:n är given

 
Ämnesverktyg Visningsalternativ
Oläst 2007-09-28, 11:19 #1
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Givet är en sorterad lista med produkt id:n (2343, 4352, 6543, 3245). Nu vill jag på ett snabbt sätt få fram produktnamnet för dessa id:n från en mysql databas. resultatet skall vara sorterat på samma sätt som i ursprungslistan. id är primärnyckel (och har därmed ett unikt index).

Vilket är snabbast?

1) loopa igenom listan och göra en select för varje produkt. dvs fyra (4) selects, en för varje produkt.
Exempel: "SELECT ID, TITLE FROM PRODUCTS WHERE ID = 3243"

2) en (1) select där (id = 2343 OR id = 4352 OR id = 6543 OR id = 3245)
Exempel: "SELECT ID, TITLE FROM PRODUCTS WHERE (ID = 2343 OR ID = 4352 OR ID = 6543 OR ID = 3245)"

3) annat?

Det som är viktigt är alltså att det går så snabbt som möjligt och att listan är sorterad enligt ursprungslistan.
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 13:56 #2
Frejs avatar
Frej Frej är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2004
Inlägg: 463
Frej Frej är inte uppkopplad
Flitig postare
Frejs avatar
 
Reg.datum: Jul 2004
Inlägg: 463
Kod:
SELECT ID, Title FROM Products WHERE ID IN (2343,4352,6543,3245)
Frej är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 14:00 #3
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Tack! Det skall jag prova!

Får man resultetet i "rätt" ordning?
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 14:12 #4
Frejs avatar
Frej Frej är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2004
Inlägg: 463
Frej Frej är inte uppkopplad
Flitig postare
Frejs avatar
 
Reg.datum: Jul 2004
Inlägg: 463
Beror på vilken ordning du vill ha!

Du kan ju använda dig av en Order BY värde.

Eller om du inte använder det så Har du antagligen ett fysiskt index på tabellen och då är ordningen på de fysiska datasidorna redan fastställda.
Frej är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 16:45 #5
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Var kommer listan med id-nummer från? Om listan kommer från databasen så kan du ju använda en subquery istället för att skriva statiska värden.
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 19:42 #6
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Listan kommer från användaren så jag kan inte använda mig av order by. Men om IN inte returnerar i samma värde så får jag väl försöka lösa det på något annat sätt.
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 19:52 #7
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Varför skulle du inte kunna använda ORDER BY bara för att listan kommer från användaren?
Kod:
SELECT ID, Title
FROM Products
WHERE ID IN (2343,4352,6543,3245)
ORDER BY ID
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 20:14 #8
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
jo - jag vill alltså att den ursprungliga sorteringen skall finnas kvar. sorterar jag på ID så får jag 2343,3245,4352,6543 - dvs fel ordning.
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 20:21 #9
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Då missuppfattade jag dig. Antagligen gör du det lättast i php eller vilket språk du nu använder.
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-09-28, 20:29 #10
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Så det snabbaste sättet är alltså att göra
Citat:
SELECT ID, Title FROM Products WHERE ID IN (2343,4352,6543,3245)
för att sedan sortera om resultatet i php (eller motsvarande)?
swan är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:11.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017