27. januar 2011 - 11:56Der 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'");
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';
Synes godt om
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'");
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.
Synes godt om
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 :-)
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 ..."
Synes godt om
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.
Synes godt om
Ny brugerNybegynder
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.