18. juni 2011 - 20:21Der 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?
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.
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.
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.