Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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
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 av Suram
Lenke til kommentar

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 av blackbrrd
Lenke til kommentar
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 :p

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...