Avatar billede it-interesseret Nybegynder
18. juni 2011 - 20:21 Der er 5 kommentarer og
1 løsning

You can't specify target for update in where claus...

Hej alle

Jeg må ikke i et hug opdatere på den samme data, som jeg select'er i... jeg er med... men hvordan gør jeg så? Jeg vil helst bare gerne fyre den af i et hug.

Her er min sætning, som kommer med ovennævnte fejl:
update jos_eventlist_events set published = 0 where id in (SELECT id FROM jos_eventlist_events where locid <> 0 and published = 1 GROUP BY locid, dates, times HAVING count(*) > 1 order by id);

Skal jeg ind og noget avanceret join? I så fald kan du realisere sætningen for mig?
18. juni 2011 - 20:38 #1
Du vil sætte published til 0 hvor locid <> 0 og published = 1.  Så hvorfor ikke udtrykke det direkte, altså:

UPDATE jos_eventlist_events SET published = 0 WHERE locid <> 0 AND published = 1.  Ikke testet, men det skulle virke.
Avatar billede it-interesseret Nybegynder
18. juni 2011 - 20:48 #2
Hvad så med dublet-delen? Se: having count(*) > 1

Hele sætningen går ud på at finde dubletter og notere det i den record, som har det mindste ID. Det giver måske ikke lige mening for jer, men det giver stor mening i vores system.
18. juni 2011 - 20:53 #3
Ok, den fattede jeg ikke.  Lad mig lige tænke over det.
18. juni 2011 - 21:32 #4
Så du søger efter grupper med ens locid, dates, og times, og i hver af sådanne grupper markerer du den række med lavest id.  Det er problemstillingen, ikke sandt?

Så må jeg nok bakke ud.  Hvis du skal klare det direkte i mysql og ikke via en applikation som php, så er jeg temmelig sikker på, at det kræver en 'stored procedure' hvor du først laver en liste af de pågældende id'er, og derefter updater rækkerne med disse id'er.  Stored procedures har jeg lært engang, men mit nuværende system understøtter ikke stored procedures, så jeg kan ikke teste det jeg tænker kan være løsningen.  Jeg håber der kommer et medlem der er klogere end jeg.

Men lige en praktisk bemærkning:  Hvis der for en given kombination af locid, dates, og times er mere end to rækker i tabellen, så får du ikke markeret alle dubletterne, kun den med laveste id.  Hvor du søger efter den laveste id i en gruppe ville jeg have troet, at du skulle søge efter alle id'er undtagen den højeste.
Avatar billede it-interesseret Nybegynder
18. juni 2011 - 22:38 #5
Hej Christian

Scriptet skal køres hver time, så det gør ikke noget, at den ikke finder alle dubletter i første hug.

Tak for forsøget :-)

Jeg implementerer det i 2 kørsler i php :-)
Avatar billede it-interesseret Nybegynder
18. juni 2011 - 22:52 #6
Hermed implementeret - lukker og slukker :-)
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