Just nu i M3-nätverket
Gå till innehåll

Hur förenar man tva fragor till en?


Christoph

Rekommendera Poster

Hej,

 

jag skulle vilja göra det lite smidig för mig att förena tva fragor med en. Jag menar ingen union pa traditionellt sätt utan mera att man har ett vilkor som är ett resultat av en annan fraga:

 

Select * From Mainmenu Where scID=(Select scID From Channels Order By sortID Asc Limit 0, 1) Order By SortID Limit 0,1

 

Den "innre" fragan, "Select scID From Channels Order By sortiD Asc Limit 0,1", visar en etta, 1. I samma veva skulle jag alltsa vilja ha resultatet av fragan "select * from mainmenu where scID=1 Order By SortID Limit 0,1".

 

Nagon som vet hur man gör detta? Mitt exempel ger ett felmeddelande i MySQL.

 

Tack för hjälpen,

 

Christoph

 

Länk till kommentar
Dela på andra webbplatser

Select * From Mainmenu Where scID IN (Select scID From Channels Order By sortID Asc Limit 0, 1) Order By SortID Limit 0,1

 

Länk till kommentar
Dela på andra webbplatser

Tack för snabbt svar - men icke, syntax error igen :(

 

EDIT: bada tva fragor funkar utmärkt, var för sig. Men inte ihop...

[inlägget ändrat 2007-01-09 20:12:47 av Christoph]

Länk till kommentar
Dela på andra webbplatser

4.0.13-nt-versionen

Ojoj, jag skulle kräva av webbhotellet att en uppgradering görs. Jag kan verkligen inte förstå att det finns så många hotell idag med utdaterade versioner. Subqueries implementerades inte förrän i version 4,1 så tyvärr får du göra det i steg (dessvärre är ju inte stored procedures heller tillgängligt i 4.0.13, kom i v.5)

 

Länk till kommentar
Dela på andra webbplatser

Tack för svaret. I detta fall är det min egen db-installation, sa det är lungt, det är ett "internt" projekt.

 

Christoph

 

Länk till kommentar
Dela på andra webbplatser

Jag ställer mig lite frågande till varför frågorna är ställda på ovanstående sätt. Har du inte väldigt mycket data i tabellerna så kan du lika gärna göra en "full join"?

 

Edit:

Vid närmare eftertanke så är jag nog ute och cyklar vad gäller benämningen "full join", men jag syftar på att skriva ovanstående två frågor i EN fråga. Som det ser ut nu så bör det kunna göras.

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2007-01-09 21:16:42 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Som det ser ut nu så bör det kunna göras.

Inte riktigt på det klara med hur villkoret för join:en skall skrivas för att enbart den senaste posten skall användas ur Channels. Men även om det går blir det ju en massa redundant data i resultatmängden från Channels. Men det kan man förstås leva med om man inte har möjlighet att uppgradera mysql.

 

Länk till kommentar
Dela på andra webbplatser

Med risk för att göra bort mig, så verkar följande relativt vettigt:

 

Select m.* From Mainmenu m, Channels c Where m.scID = c.scID Order By c.sortID Asc, m.SortID Limit 1

 

Känns som att sorteringsvillkoren borde plocka fram samma rad. Om det skulle fungera så är nackdelen förstås att MySQL får mer data att sortera...

 

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Nja, det kan ju finnas fler än en post i MainMenu relaterat till det högsta id:t i Channels, så det ger inte samma resultat dessvärre.

 

Länk till kommentar
Dela på andra webbplatser

Nja, det kan ju finnas fler än en post i MainMenu relaterat till det högsta id:t i Channels, så det ger inte samma resultat dessvärre.

Ja, men han plockar ändå ut endast "första" posten i båda tabellerna:

Order By SortID Limit 0,1 i i båda SQL-frågorna.

 

Den sammanfogade frågan borde sortera enligt två villkor:

1. c.sortID Asc: sortera Channels så att det i resultatlistan högst upp kommer de raderna där c.sortID är lägst.

2. , m.SortID Limit 1: vidare kommer MySQL även sortera efter m.SortID i tabellen Mainmenu. Första returnerade resultatraden borde då vara den som har c.sortID Asc samt , m.SortID (fortsättning på order by).

 

1 kan då jämföras med tidigare subselect.

 

Jag tror att vi missförstår varandra någonstans, eller så missförstår jag syftet med frågorna. Skulle dock vara kul att få lite data att testa på.

 

Även om min fråga skulle visa sig vara felaktig så är jag säker på att det går att få ihop det till en fråga. I stort sett alla sub selects går att skriva om. Jag gjorde lite på den fronten för ett tag sedan (1+ år) just när att MySQL 4.0.x var den nyaste versionen....

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2007-01-09 22:34:26 av TicoRoman]

Länk till kommentar
Dela på andra webbplatser

Ja, men han plockar ändå ut endast "första" posten i båda tabellerna:

Order By SortID Limit 0,1 i i båda SQL-frågorna.

Så sant så sant, missade det. Ja då funkar det som du föreslog.

 

Länk till kommentar
Dela på andra webbplatser

Så sant så sant, missade det. Ja då funkar det som du föreslog.

Bra, jag blev osäker ett litet tag när "självaste" Anjuna Moon sa att det inte gick. :)

 

_________

TicoRoman - Anfall är bästa försvar

 

Länk till kommentar
Dela på andra webbplatser

Hej,

 

tack för svaren - gick och la mig "tidig" igår (samt att vi är +1 timme sv tid :) och såg till min glädje all trafik kring ämnet imorse.

 

Det funkar alldeles utmärkt, jupps, kanonbra!!!

 

Tack!

 

Christoph

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...