Suram Skrevet 3. august 2008 Del Skrevet 3. august 2008 Hei hei, er forholdsvis grønn når det gjelder mySQL, gjorde en del access på VGS og nå gjort en del intro oracle på høyskolen så jeg har peiling på struktur osv, men sliter fort når det kreves litt mer avanserte spørringer. Jeg ønsker å oppdatere et felt i en tabell, men hvis tallet blir større enn det som er maks så vil jeg sette det til maks. Så langt har jeg kommet fram til (mest ved gjetning) UPDATE town SET town_percentage = IF(SELECT town_percentage FROM town WHERE town_id = 2) + 8) > 100) THEN 100 ELSE (SELECT town_percentage FROM town WHERE town_id = 2) + 8; Merk at tallene 8 og 2 vil være variabler i selve programmet. Dette blir ikke godtatt som ok sql, men jeg sliter med å forstå hva mySQL sin hjemmeside sier om saken, tror det har noe med mangel på søvn. Uansett, litt hjelp hadde vært kjempeflott. Som bonusspørsmål: er det mulig å sette en maks i selve databasen som vil sørge for at alle verdiger over blir satt til denne, eller vil den da generere sql error? Lenke til kommentar
terjeelde Skrevet 3. august 2008 Del Skrevet 3. august 2008 Kanskje lettere om du forklarer i klartekst, ikke SQL, akkurat hva du har lyst til å gjøre? Jeg forstår du vil sette en integer til maks hvis den ellers ville vært over maks, men usikker på resten av det du prøver å gjøre. Lurer også på om dette er enbruker, eller flerbruker? (lurer pga concurrency, flere som redigerer samtidig) Lenke til kommentar
Suram Skrevet 3. august 2008 Forfatter Del Skrevet 3. august 2008 (endret) Kanskje lettere om du forklarer i klartekst, ikke SQL, akkurat hva du har lyst til å gjøre? Jeg forstår du vil sette en integer til maks hvis den ellers ville vært over maks, men usikker på resten av det du prøver å gjøre. Lurer også på om dette er enbruker, eller flerbruker? (lurer pga concurrency, flere som redigerer samtidig) Hei! Takk for raskt svar. Det skal bare oppdateres for en bruker av gangen. Det jeg prøver å gjøre er rett og slett: hvis verdien i variablen fra før + den nye verdien er størret enn "taket" skal variablen settes til "tak-verdien" hvis ikke skal den settes til den gamle verdien + den nye. altså if(var + value > max) var = max Else var = var + value edit: glemte jo selvsagt å nevne at problemet er at jeg må hente ut "var" med en subquery. Endret 3. august 2008 av Suram Lenke til kommentar
blackbrrd Skrevet 3. august 2008 Del Skrevet 3. august 2008 (endret) Prøv med CASE WHEN istedetfor IF? UPDATE town SET town_percentage = CASE WHEN( (town_percentage + 8) > 100) THEN 100 ELSE (town_percentage + 8) END WHERE town_id = 2; Du hadde glemt where clause, så du hadde oppdatert alle radene i town. Endret 3. august 2008 av blackbrrd Lenke til kommentar
Suram Skrevet 3. august 2008 Forfatter Del Skrevet 3. august 2008 Du hadde glemt where clause, så du hadde oppdatert alle radene i town. hehehe er nok ikke dumt at jeg sitter på en dummy DB når jeg tester de greiene her nei Takk for forslaget, prøver det nå. Lenke til kommentar
Suram Skrevet 3. august 2008 Forfatter Del Skrevet 3. august 2008 Du hadde glemt where clause, så du hadde oppdatert alle radene i town. hehehe er nok ikke dumt at jeg sitter på en dummy DB når jeg tester de greiene her nei Takk for forslaget, prøver det nå. får fortsatt ikke subqueries til å fungere nei. Er ikke disse bare å sette inn "hvor du vil" med en ekstra parentes rundt? aka SELECT * FROM table WHERE table_id = (SELECT table_id FROM table WHERE table_name = 'help'); Lenke til kommentar
Suram Skrevet 3. august 2008 Forfatter Del Skrevet 3. august 2008 Fant ut at jeg ikke har lov til å bruke FROM mot samme tabellen som jeg vil oppdatere så da gikk den løsningen føyken. Jaja, takk for hjelpen alle sammen! Lenke til kommentar
blackbrrd Skrevet 3. august 2008 Del Skrevet 3. august 2008 Tjah... Du kan bruke et alias? Hvorfor trenger du å bruke en subquery forresten? Det er ingenting i eksempelet ditt som forklarer hvorfor det skulle være nødvendig. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå