Avatar billede kimlarsen1978 Nybegynder
11. august 2007 - 10:20 Der er 8 kommentarer og
1 løsning

LEFT JOIN i en FROM (SELECT

Hejsa
Hvordan skal denne linie sættes sammen?
*********
SELECT koebsAnnoncer . * , koebsBilleder.annonceid, koebsBilleder.billede, koebsBilleder.billedeBredde, koebsBilleder.billedeHoejde, koebsBilleder.thumbnail, koebsBilleder.thumbnailBredde, koebsBilleder.thumbnailHoejde
FROM (
(
SELECT *
FROM koebsAnnoncer
WHERE blnSlettet =0
AND blnErhverv =0
AND Dato2 > '2007-07-21'
ORDER BY opdateret DESC
LIMIT 20
)
LEFT JOIN koebsBilleder ON koebsAnnoncer.id = koebsBilleder.annonceid
)x
ORDER BY opdateret DESC
LIMIT 0 , 10
********************

MySQL returnerede: 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON koebsAnnoncer.id = koebsBilleder.annonceid) x ORDER BY opdateret DE' at line 1

Jeg vil gerne vælge de første 10 poster af de 20 senste opdaterede annoncer og LEFT JOIN'en dem med koebsBilleder.

En der ved hvad der er galt?
Avatar billede kjulius Novice
11. august 2007 - 11:08 #1
Prøv med:

SELECT koebsAnnoncer . * , koebsBilleder.annonceid, koebsBilleder.billede, koebsBilleder.billedeBredde, koebsBilleder.billedeHoejde, koebsBilleder.thumbnail, koebsBilleder.thumbnailBredde, koebsBilleder.thumbnailHoejde
FROM (
SELECT *
FROM koebsAnnoncer
WHERE blnSlettet =0
AND blnErhverv =0
AND Dato2 > '2007-07-21'
ORDER BY opdateret DESC
LIMIT 20
) x
LEFT JOIN koebsBilleder ON x.id = koebsBilleder.annonceid
ORDER BY opdateret DESC
LIMIT 0 , 10
Avatar billede kjulius Novice
11. august 2007 - 11:12 #2
Sorry, prøv med:

SELECT x.*, koebsBilleder.annonceid, koebsBilleder.billede, koebsBilleder.billedeBredde, koebsBilleder.billedeHoejde, koebsBilleder.thumbnail, koebsBilleder.thumbnailBredde, koebsBilleder.thumbnailHoejde
FROM (
SELECT *
FROM koebsAnnoncer
WHERE blnSlettet =0
AND blnErhverv =0
AND Dato2 > '2007-07-21'
ORDER BY opdateret DESC
LIMIT 20
) x
LEFT JOIN koebsBilleder ON x.id = koebsBilleder.annonceid
ORDER BY opdateret DESC
LIMIT 0 , 10
Avatar billede kimlarsen1978 Nybegynder
11. august 2007 - 11:26 #3
Total konge!
Kan du sætte et par ord på løsningen så jeg også lærer lidt? :o)

Og smid gerne et svar!
Avatar billede kjulius Novice
11. august 2007 - 12:01 #4
Et par ord? Hmmm... - jo, det der sker er i sætningen er, at du først selekterer dine 20 poster fra koebsAnnoncer. Dem placerer du i en slags midlertidig tabel (ved at placere den i en parantes), som du navngiver x. Derfor skal man herefter referere til disse data som om det var fra en tabel som hedder x. Det er derfor, der i SELECT delen nu skal stå x.* i stedet for koebsAnnoncer.* - selvom data selvfølgelig oprindeligt kom fra denne tabel. På samme måde skal LEFT JOINs ON sætning også referere til feltet i den midlertidige tabel x.

Tja, mere er der vel ikke at sige om det... tror jeg. :-)
Avatar billede kimlarsen1978 Nybegynder
11. august 2007 - 12:04 #5
Som sagt... KONGE!
:o)
Avatar billede kimlarsen1978 Nybegynder
11. august 2007 - 12:18 #6
Du virker til at have godt styr på det her :o)

Tillægsspørgsmål, er der er måde hvorpå man kan få returneret det ID som en post har fået ved INSERT INTO xxx?

Lige nu laver jeg INSERT også siger jeg bagefter "SELECT id FROM tabel ORDER BY id DESC LIMIT 0,1"
Avatar billede kimlarsen1978 Nybegynder
11. august 2007 - 12:43 #7
Fandt lige den her i et andet spg:

SELECT LAST_INSERT_ID() AS id

Er det korrekt at sålænge jeg bruger samme Conn, så vil den med 100% garanti give den jeg lige har insat også selvom flere insætter på samme tid?
Avatar billede kjulius Novice
11. august 2007 - 15:33 #8
Ja, så længe du kun laver én insert pr. udført SQL streng, så vil funktionen returnere den autogenererede id for den senest tilføjede række foretaget af den samme connection. Hvis du udfører en INSERT som opretter flere rækker i ét hug, vil funktionen returnere den første af de oprettede id'er.
Avatar billede kimlarsen1978 Nybegynder
12. august 2007 - 19:07 #9
...og jeg siger tak :o)
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