Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 11:37 Der er 22 kommentarer og
1 løsning

Simpelt MYSQL UPDATE

Hej eksperter.
Jeg vil bare gå ind og opdatere fødselsdags-datoen på de heste med de følgene ID'er, jeg prøvede sådan, men det virkede ikke;

UPDATE heste SET born='2011-05-21 19:32:06' WHERE id=´144´, ´145´, ´147´, ´148´, ´149´, ´150´, ´151´

Hvad skal jeg så skrive?
05. november 2011 - 11:47 #1
Prøv:

UPDATE heste SET born='2011-05-21 19:32:06' WHERE id IN(´144´, ´145´, ´147´, ´148´, ´149´, ´150´, ´151´)
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 11:51 #2
Nix, det vil den heller ikke. :s
Avatar billede olsensweb.dk Ekspert
05. november 2011 - 12:27 #3
det nemmeste vil nok være en for løkke
men det ville have været smart hvis det #1 virkede
05. november 2011 - 12:49 #4
Milla, det virkede med en test tabel jeg lavede, så det er muligt, at problemet ligger et andet sted.  Kan du måske vise din creation script for tabellen heste og vise eksempler på de data du har i tabellen.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 12:49 #5
Ronols, altså jeg laver det bare direkte inde i mysql databasen??
Det er fordi jeg ikke gider og sidde og redigere 30 heste (der kommer flere ID'er på) :s
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 13:07 #6
Altså den skriver;

MySQL returnerede:

#1054 - Unknown column '´144´' in 'where clause'

Men jeg ved ikke hvad det betyder??
05. november 2011 - 13:19 #7
Det betyder, at din mysql af en eller anden grund (som vi skal finde) fortolker 144 er et felt i tabellen og ikke en id værdi.  Får du samme fejlmelding når du bruger 'WHERE id = '144'... og når du bruger 'WHERE id IN('144'...)?  Når du i mysql'en indfører '144', så opfatter mysql'en det åbenbart som noget andet.  Eftersom id sandsynligvis er et numerisk felt kunne du prøve at slette anførselstegnene, altså WHERE id IN (144,...)  Du kunne også prøve at slette '144' og sige WHERE id IN ('145', '147'... og se om fejlmeldingen så ændrer sig til #1054 - Unknown column '´145´' in 'where clause' .
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 13:23 #8
Hvis jeg sletter IN
siger den;

#1305 - FUNCTION users_camilla.id does not exist
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 13:24 #9
Og hvis jeg fjerne 144 og tilføjer IN igen, så siger den;

#1054 - Unknown column '´145´' in 'where clause'
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 13:35 #10
Og hvis jeg fjerner ´-tegnene så siger den:

#1062 - Duplicate entry '2011-05-21 19:32:06' for key 2
05. november 2011 - 14:17 #11
Det er helt oplagt, at der må være et antal sammenvirkende problemer.  Yderligerer går den kode du bruger videre end det kode fragment du viser, for ellers ville du ikke få noget med FUNCTION users_camilla.id.  Hvis du vil vise tabellen med dens kolonner og datatyper, for eksempel oprettelses scriptet, og tabellens indhold (SELECT * FROM heste), og hele koden du bruger i forbindelse med update forespørgselen, så kan jeg (og andre) prøve at hjælpe.  Hvis du ikke er så meget for at offentliggøre det, så er det i orden, men så må jeg bakke ud.  Jeg er ikke smart nok til at finde ud af det ud fra ovenstående oplysninger alene.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 14:35 #12
Christian_Belgien; men jeg forstår ikke hvad det er du vil have?
Hvis du vil have HELE den der tabel er der altså over 150 heste i den(ca.) ? :s
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 14:35 #13
Det eneste jeg vil, er at ændre fødselsdagsdato'en på de heste (og nogle flere) med overstående id..
I stedet for at jeg skal sidde og redigere 30 heste, det tager nemlig meget lang tid.
Avatar billede olsensweb.dk Ekspert
05. november 2011 - 15:43 #14
lav et sql dump lige som du lavede i
http://www.eksperten.dk/spm/948652 #33 og #40

disse id'er (´144´, ´145´, ´147´, ´148´, ´149´, ´150´, ´151´)  skal selføgelig indgå og lidt til.

ligeledes skal vi bruge hvordan du danner den id liste du vil updaterer, som Christian_Belgien skriver i #11
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 15:47 #15
Ronols: Men den bliver jo VIRKELIG lang hvis i skal have sql dump for 150 heste? :S


- Hvilken id liste??? Jeg skriver bare under "SQL" i phpMyAdmin den sql jeg ikke kan få til at virke? :S
05. november 2011 - 16:55 #16
Milla, jeg lavede følgende simple tabel med et par simple data:

CREATE TABLE milla_heste(id INT,  born DATETIME);

INSERT INTO milla_heste VALUES(144, '2011-05-17 19:32:06');
INSERT INTO milla_heste VALUES(145, '2011-05-18 19:32:06');
INSERT INTO milla_heste VALUES(146, '2011-05-19 19:32:06');
INSERT INTO milla_heste VALUES(147, '2011-05-20 19:32:06');

således at SELECT * FROM milla_heste giver dette:

id  born 
144 2011-05-17 19:32:06
145 2011-05-18 19:32:06
146 2011-05-19 19:32:06
147 2011-05-20 19:32:06

Så lavede jeg denne query:

UPDATE milla_heste SET born = '2011-05-21 19:32:06' WHERE id IN(144, 145, 147);

hvorefter tabellen ser således ud:

id  born 
144 2011-05-21 19:32:06
145 2011-05-21 19:32:06
146 2011-05-19 19:32:06
147 2011-05-21 19:32:06

Og det var præcist hvad du var ude efter, ikke sandt?

Det virker på min simple tabel med simple data, men den samme forespørgsel i det samme mysql program virker ikke på din tabel med dine data.  Det må så nødvendigvis skyldes, at tabellerne er forskellige.  Fejlmeldinger såsom i #6 tyder på, at der er noget specielt ved tabellens strukturen.

Nu kunne jeg så sige:  "Men det skal f.... virke, basta!"  Men fordi jeg er en flink fyr og en charmetrold tilbyder jeg, at vi kan kikke på det sammen.  Måske får vi øje på noget.  To øjne ser bedre end et.  (Og ronols kikker måske med.)  Men jeg kan ikke kikke på din tabel hvis jeg ikke kan kikke på din tabel.  Da du oprindeligt lavede tabellen, hvordan bar du dig så ad?  Havde du et script såsom "CREATE TABLE heste (id INT, ...... o.s.v)?  I så fald lad os se det script.  Eller puslede du tabellen tilrette for eksempel i phpmyadmin?  Så kan du måske kopiere tabellens struktur og lave et link dertil.

Og fejlmeldingen #10 kunne tyde på, at vi skal kikke på de data der er i tabellen.  Hvad med at vise os "SELECT * FROM HESTE LIMIT 20"  .  Så får vi et godt indtryk af dataerne i tabellen.

Og fejlmeldingen i #8 kan jeg ikke forestille mig kan opstå ud fra den ene kodelinie i isolering.  Du må bruge koden i en eller anden sammenhæng.  Vis os den sammenhæng.

Det er de samme tre ting jeg spurgte om i #11, altså tabellens struktur, tabellens data, og så den kode du bruger i forbindelse med forespørgslen.

Men det er dig der spørger om hjælp, ikke mig der beder om at få lov at hjælpe.  Hvis du mener at det bliver for tosset (og hvis det kun drejede sig om 30 fødselsdage en gang for alle kunne du have gjort det manuelt mange gange nu) så drop det.  Hvis du vælger at køre videre, så kom med de nødvendige oplysninger.
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 17:52 #17
Christian_Belgien: Jeg har selv siddet og trykket "Opret ny tabel", skrevet "heste", også med et hvis antal felter, hvorefter jeg bare har tilføjet flere når jeg har sagt -heey det skal jeg bruge!

Men jeg skal bare vide, vil du have HELE tabellens sql dumb, så du får med 150+ heste?

Det er det eneste jeg har forstået du vil have mig til..Hvad gør det der LIMIT egentlig??

Mht. #8 der har jeg IKKE brugt andet kode, nej. Det var kun den ene kodelinje, jeg gjorde ligesom med de andre..
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 17:55 #18
Koden:
UPDATE heste SET born='2011-05-21 19:32:06' WHERE id IN (144, 145, 147, 148, 149, 150, 151)

Burde sætte datoen.

Hvis du får fejlen du fik i #10. Er det fordi du har sat born til at være unik eller primary key i tabellen.
05. november 2011 - 18:28 #19
Der er ikke noget jeg vil have dig til.  Intet som helst!

Er der noget du gerne vil have mig til? 

Du ville have mig (og de andre Eksperten medlemmer) til at fortælle hvordan man kan update en tabel for en række værdier såsom id værdierne 144, 145, 147, o.s.v.  Det gjorde jeg: man placerer værdierne i IN(144, 145, 147,...).  og i #16 demonstrede jeg, at det virker for 'normale' tabeller med 'normale' værdier.  Har du studeret og tænkt over mit eksempel?  Hvis ikke, og hvis det ikke er umagen værd at gøre det, så lad os stoppe her. 

Eller accepterer du, at hvis det ikke virker hos dig, så ligger problemet ikke i update forespørgslen men må ligge i din tabels struktur og/eller værdier? og vil du have mig til at hjælpe med at finde ud af hvor det kan være?  I så fald må du læse med opmærksomhed hvad det er for oplysninger der er nødvendige.  Har du prøvet at køre denne query "SELECT * FROM heste LIMIT 20" ?  Ellers prøv og se hvad der sker.  Hvis du ikke synes det er umagen værd, så må vi stoppe.

Jeg spørger om to ting: tabellens STRUKTUR og tabellens DATA (eller de første 20 linier af data.)  Tabellens struktur er en oversigt over hvilke felter der er i tabellen, hvilken datatype hvert felt har, og hvilke restriktioner felterne har, såsom NOT NULL og UNIQUE.  Hvis du bruger phpmyadmin, så klik på tabellens navn i oversigten, og når du får tabellen så klik på Structure (eller hvad det hedder i den danske version,) så får du denne oversigt.

(For det tredje siger du, at du ikke bruger koden i sammenhæng med anden kode, så det dropper vi.)

Hvis du ikke forstår hvad jeg siger, så må jeg konstatere, at jeg ikke er i stand til at gøre mig forståelig, og hvad jeg ikke evner må jeg stoppe med og 'gå over til næste punkt på dagsordenen.'
Avatar billede Milla-Tigerdyr Praktikant
05. november 2011 - 18:59 #20
Heh..min fejl, alder/born er åbenbart blev unik, og jeg forstår ikke hvordan fordi jeg har da ikke sat den til at være unik? :O

Nå, men det virker i hvert fald nu! :D

Smider i alle 3 ikke lige et svar?
05. november 2011 - 19:05 #21
Svar fra mig. (Det var sådan noget jeg mistænkte, derfor ville jeg gerne se tabellens struktur.)
Avatar billede olsensweb.dk Ekspert
05. november 2011 - 19:06 #22
jeg sprinter over, den tålmodige (Christian_Belgien) burde have min andel
Avatar billede JensPeterSvensson Nybegynder
05. november 2011 - 19:27 #23
Enig med ronols.
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