Avatar billede Slettet bruger
27. januar 2011 - 11:56 Der er 5 kommentarer og
1 løsning

Join i update - i postgres

Hej eksperter,

Jeg har flg. update, der IKKE virker, når jeg retter siden mod en postgres-database:

pg_query("UPDATE ".$prefix."course c INNER JOIN ".$prefix."course_categories cat ON c.category = cat.id SET c.visible = '1' WHERE c.category = '".$vist."' AND c.visible = '0' AND c.category <> '0'");

Er der noget konflikt med JOIN i en update og postgres, eller...?


Min tilsvarende kode - til Mysql virker fint (identisk):

mysql_query("UPDATE ".$prefix."course c INNER JOIN ".$prefix."course_categories cat ON c.category = cat.id SET c.visible = '1' WHERE c.category = '".$vist."' AND c.visible = '0' AND c.category <> '0'");
Avatar billede HBP2 Praktikant
27. januar 2011 - 13:21 #1
Jeg må indrømme at jeg aldrig har prøvet at bruge UPDATE med JOIN - jeg er ikke shelt sikker på hvad det er du prøvet at gøre, men er det mon noget i retningen af dette:

UPDATE course FROM course AS c,course_categories AS cat SET c.visible = '1' WHERE c.category = cat.id AND c.category = '$vist' AND c.visible = '0' AND c.category <> '0';
Avatar billede Slettet bruger
27. januar 2011 - 21:39 #2
Jeg beklager meget - jeg fik postet den forkerte SQL - der er 2, og de er næsten identiske, men her er problem-barnet:

mysql_query("UPDATE ".$prefix."course c INNER JOIN ".$prefix."course_categories cat ON c.category = cat.id SET c.visible = '0' WHERE cat.path like '%/".$skjult."/%' AND c.visible = '1'");
Avatar billede HBP2 Praktikant
27. januar 2011 - 22:09 #3
Det er jo samme query - bare med mindre rettelser. Problemet er vel det samme - et eller andet med UPDATE+JOIN, og løsningen er vel derfor den samme: at lade være med at bruge UPDATE+JOIN.

Hvad er det du ønsker at gøre?

Og et forslag: fjern ting som $prefix fra eksemplet - det har ingen betydning for løsningen, men gør det sværere at læse eksemplet.
Avatar billede Slettet bruger
27. januar 2011 - 22:20 #4
Mjah - det er jo ikke det samme, fordi det er cat.path, der skal svare til (eller rettere - indeholde) $skjult. Dvs. jeg opdaterer tabellen course, men må kigge i tabellen course_categories for at tjekke om $skjult er en del af "path"... SÅ svært at forklare :-)
Avatar billede HBP2 Praktikant
27. januar 2011 - 22:42 #5
Der skal vist nogle mindre rettelser til mit oprindelige forslag:

UPDATE course SET visible='1' FROM course_category AS cat WHERE category=cat.id AND category='$vist' AND visible='0' AND category<>'0';

Samme princip i dit andet eksempel - den tabel som ikke skal opdateres men kun bruges som test, skal optræder i "FROM ... AS ..."
Avatar billede Slettet bruger
28. januar 2011 - 08:00 #6
hej, tak for input - det virker desværre ikke...

Problemet er - hvis jeg har forstået det rigtigt - at "WHERE category = cat.id" ikke altid er sandt.
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