Avatar billede kjeldsted Novice
08. november 2008 - 18:25 Der er 4 kommentarer og
1 løsning

Kompliceret SQL.

Hej Alle.

Jeg sidder med et lidt spidsfindigt problem.

Jeg vil prøve at beskrive hvad det er jeg forsøger:

Jeg har en tabel hvori jeg har en række linjer. I hver af disse linjer henvises til en anden tabel. Der er dog 3 muligheder for  hvilken tabel det skal hentes fra. Enten fra én der hedder runja_eng_sot eller runja_vo_tlg eller slet ingen.

Altså tabelstruktur:

runja_rundown:
id,stamp,log_ip,id_orders,id_type,id_element,pos    id_live

runja_eng_sot:
id,stamp,log_ip,beskrivelse,sendedato,type,manus,dur,opfldato,journalist,tekniker,oplaeg,nedlaeg,note,status_f,status_k,status_m,status_v,status_g,arkiv_tape,arkiv_dur,arkiv_ink,ret    ret_bruger

runja_vo_tlg:
id,stamp,log_ip,beskrivelse,sendedato,manus,type,dur,journalist,tekniker,status_f,status_k,status_m,status_v,status_g,note,ret,ret_bruger

Jeg vil altså fx liste fra runja_rundown hvor runja_rundow.id_orders='23', hvor den henter alle linjer. Derudover skal den ENTEN hente fra runja_eng_sot, runja_vo_tlg eller fra intet.

Jeg har pt. lavet koden:

SELECT runja_rundown.id,runja_rundown.stamp,runja_rundown.id_orders,runja_rundown.id_type,runja_rundown.id_element,runja_rundown.pos,runja_rundown.id_live,runja_eng_sot.status_f,runja_eng_sot.status_k,runja_eng_sot.status_m,runja_eng_sot.status_v,runja_eng_sot.status_g FROM runja_rundown INNER JOIN runja_eng_sot ON runja_rundown.id_element=runja_eng_sot.id WHERE (runja_rundown.id_type='1' OR runja_rundown.id_type='2') AND id_orders = %s ORDER BY pos ASC

hvor den sådan set gør det den skal, bortset fra at denne kode KUN henter type 1 og 2 (runja_eng_sot) og ikke type 3 og 4 (runja_vo_tlg). Dette troede jeg, var muligt via UNION ALL, men med koden:

SELECT runja_rundown.id,runja_rundown.stamp,runja_rundown.id_orders,runja_rundown.id_type,runja_rundown.id_element,runja_rundown.pos,runja_rundown.id_live,runja_eng_sot.status_f,runja_eng_sot.status_k,runja_eng_sot.status_m,runja_eng_sot.status_v,runja_eng_sot.status_g FROM runja_rundown INNER JOIN runja_eng_sot ON runja_rundown.id_element=runja_eng_sot.id WHERE (runja_rundown.id_type='1' OR runja_rundown.id_type='2') AND id_orders = %s ORDER BY pos ASC
UNION ALL
SELECT runja_rundown.id,runja_rundown.stamp,runja_rundown.id_orders,runja_rundown.id_type,runja_rundown.id_element,runja_rundown.pos,runja_rundown.id_live,runja_vo_tlg.status_f,runja_vo_tlg.status_k,runja_vo_tlg.status_m,runja_vo_tlg.status_v,runja_vo_tlg.status_g FROM runja_rundown INNER JOIN runja_vo_tlg ON runja_rundown.id_element=runja_vo_tlg.id WHERE (runja_rundown.id_type='3' OR runja_rundown.id_type='4') AND id_orders = %s ORDER BY pos ASC

Får jeg blot fejlen "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 'LIMIT 0, 30' at line 1".

Håber det er til at forstå, eller skriv :)

På forhånd tak.
Avatar billede w13 Novice
08. november 2008 - 18:27 #1
Fejlbeskeden siger jo, at noget er galt nær "LIMIT 0, 30", hvilket ikke står noget sted i den kode, du viser. Så fejlen må ligge i noget, du ikke viser, hvor der står "LIMIT 0, 30".
Avatar billede kjeldsted Novice
08. november 2008 - 18:38 #2
Hov. Du får lige lidt mere af koden:

$query_rsRundown = sprintf("SELECT runja_rundown.id,runja_rundown.stamp,runja_rundown.id_orders,runja_rundown.id_type,runja_rundown.id_element,runja_rundown.pos,runja_rundown.id_live,runja_eng_sot.status_f,runja_eng_sot.status_k,runja_eng_sot.status_m,runja_eng_sot.status_v,runja_eng_sot.status_g FROM runja_rundown INNER JOIN runja_eng_sot ON runja_rundown.id_element=runja_eng_sot.id WHERE (runja_rundown.id_type='1' OR runja_rundown.id_type='2') AND id_orders = %s ORDER BY pos ASC
UNION ALL
SELECT runja_rundown.id,runja_rundown.stamp,runja_rundown.id_orders,runja_rundown.id_type,runja_rundown.id_element,runja_rundown.pos,runja_rundown.id_live,runja_vo_tlg.status_f,runja_vo_tlg.status_k,runja_vo_tlg.status_m,runja_vo_tlg.status_v,runja_vo_tlg.status_g FROM runja_rundown INNER JOIN runja_vo_tlg ON runja_rundown.id_element=runja_vo_tlg.id WHERE (runja_rundown.id_type='3' OR runja_rundown.id_type='4') AND id_orders = %s ORDER BY pos ASC", $colname_rsRundown);
$query_limit_rsRundown = sprintf("%s LIMIT %d, %d", $query_rsRundown, $startRow_rsRundown, $maxRows_rsRundown);
Avatar billede arne_v Ekspert
08. november 2008 - 21:44 #3
Prøv og udskriv den endelige query og copy paste den herind.
Avatar billede kjeldsted Novice
08. november 2008 - 23:22 #4
Jeg har faktisk fået løst problemet nu, med et par ekstra INNER JOIN og sådan... Sikkert ikke det meste optimale SQL mæssigt, men det virker...

Men vil I havde lidt points for jeres opmærksomhed, så smid et svar. Hvis ikke... Tja, så lad være ;)

Men mange tak for opmærksomheden....
Avatar billede w13 Novice
09. november 2008 - 13:33 #5
;)
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