Avatar billede baitianlong Nybegynder
20. november 2004 - 23:11 Der er 19 kommentarer og
1 løsning

SET felt='feltværdi + x

Hej. Jeg skal bruge noget SQL hvor man hæver et felts værdi i en tupel med en anden værdi!

Eksempel "UPDATE tabel SET rating='rating + 8', nbr_votes='nbr_votes + 1' WHERE..."

Lad os sige der står:
rating........nbr_votes
63..............11

Så skal min SQL med rating-værdien 8 sætte rating til 71 og nbr_votes skal hæves med een.

Hvordan kan jeg skrive det, for jeg regner ikke med at mit eksempel fungerer :)
Avatar billede Slettet bruger
20. november 2004 - 23:16 #1
UPDATE tabel SET rating=rating+8, nbr_votes=nbr_votes+1 WHERE...

burde virke fint :)
Avatar billede baitianlong Nybegynder
20. november 2004 - 23:30 #2
Jeg kan ikke forstå det ikke virker. Jeg har denne PHP funktion:

if(mysql_num_rows(mysql_query("SELECT * FROM shoprating WHERE shopname='$shopname' AND town='$town'")) > 0) {
    mysql_query("UPDATE shoprating SET rating='rating+$rating', nbr_votes='nbr_votes+1' WHERE shopname='$shopname' AND town='$town'") or die(mysql_error());
} else {
    mysql_query("INSERT INTO shoprating(shopname, town, rating, sector, nbr_votes) VALUES('$shopname', '$town', '$rating', '$sector', '1')");
}

Hvis jeg indtaster et shopnavn og by, som allerede eksisterer, laver den alligevel en ny tupel ?!
Avatar billede Slettet bruger
20. november 2004 - 23:34 #3
Prøv at lave

if(mysql_num_rows(mysql_query("SELECT * FROM shoprating WHERE shopname='$shopname' AND town='$town'")) > 0)

om til

$sql = "SELECT * FROM shoprating WHERE shopname='$shopname' AND town='$town'";
echo $sql;
if(mysql_num_rows(mysql_query($sql)) > 0)

Så er der en chance for at se om din sql indeholder det du tror den gør.
Avatar billede baitianlong Nybegynder
20. november 2004 - 23:39 #4
Jeg har lige prøvet med:

print(mysql_num_rows(mysql_query("SELECT * FROM shoprating WHERE shopname='$shopname' AND town='$town'")));

Og den skriver 1 , så det er jo ok. Hvorfor hulen opdaterer den så ikke i stedet for at skrive en ny
Avatar billede Slettet bruger
20. november 2004 - 23:43 #5
Mon ikke du har en fejl et andet sted i din kode?
Avatar billede baitianlong Nybegynder
20. november 2004 - 23:51 #6
Din test viser fejlen, men jeg fatter ikke hvor den sker:

SELECT * FROM shoprating WHERE shopname='Hvidberg' AND town='Randers '

Der er et mellemrum efter Randers...

Jeg har så kigget i min bynavne tabel, og ganske rigtigt. Der er et mellemrum efter hvert bynavn. Det er noget skidt... Men så kan jeg vel bruge LIKE $bynavn% i stedet for :) ?!?!
Avatar billede baitianlong Nybegynder
20. november 2004 - 23:57 #7
Nu skriver den så:

SELECT * FROM shoprating WHERE shopname='Hvidberg' AND town LIKE 'Randers %'

Men den laver stadig en ny post selv om Hvidberg, Randers ligger der i forvejen ?!

Det er pga. det rådne mellemrum... Hvad gør jeg ?
Avatar billede Slettet bruger
21. november 2004 - 00:00 #8
Den skal skrive

SELECT * FROM shoprating WHERE shopname='Hvidberg' AND town LIKE 'Randers%'

(du havde stadig et mellemrum efter Randers)
Avatar billede Slettet bruger
21. november 2004 - 00:02 #9
ah...jamen du bliver nødt til at fjerne det mellemrum til sidst, enten i databaen eller ved hjælp af trim() med PHP

$sql = "SELECT * FROM shoprating WHERE shopname='$shopname' AND town='" . trim($town) . "'";
Avatar billede baitianlong Nybegynder
21. november 2004 - 00:02 #10
Ja, det er netop det, der er problemet. I min bytabel er der mellemrum efter hvert bynavn.. Kan jeg på en eller anden smart måde fjerne det sidste mellemrum i bynavnet i hver post i tabellen ?
Avatar billede baitianlong Nybegynder
21. november 2004 - 00:11 #11
OK, din trim var en vinder. Nu er vi tilbage ved en anden problematik:

mysql_query("UPDATE shoprating SET rating='rating+$rating', nbr_votes='nbr_votes+1' WHERE shopname='$shopname' AND town='".trim($town)."'") or die(mysql_error());

Den sætter rating og nbr_votes til 0, 0. Den skulle lægge $rating og 1 til de værdier.
Avatar billede Slettet bruger
21. november 2004 - 09:46 #12
Du skal fjerne dine plinger

mysql_query("UPDATE shoprating SET rating=rating+$rating, nbr_votes=nbr_votes+1 WHERE shopname='$shopname' AND town='".trim($town)."'") or die(mysql_error());
Avatar billede baitianlong Nybegynder
21. november 2004 - 17:46 #13
Ok, nu virker det, så det er jo fint nok...

Har du et forslag til hvordan jeg kan fikse databasen, hvis jeg vil det?

Kan jeg skrive "UPDATE postnr SET bynavn=bynavn-' '" eller sådan noget?

Smid lige svar samtidig :)
Avatar billede Slettet bruger
21. november 2004 - 17:54 #14
UPDATE postnr SET bynavn=TRIM(bynavn)
Avatar billede Slettet bruger
21. november 2004 - 17:54 #15
Der er nemlig også en trim funktion i MySQL :)
Avatar billede baitianlong Nybegynder
21. november 2004 - 18:00 #16
Ok, og så er det ikke sådan at Aalborg N bliver til AalborgN ? ;)
Avatar billede baitianlong Nybegynder
21. november 2004 - 18:06 #17
Det gider den ikke:

Berørte rækker: 0 (Forepørgsel tog 0.0066 sek)

SQL-forespørgsel :
UPDATE postnr SET bynavn = TRIM( bynavn ) WHERE postnr != '959595959' 

Det samme sker uden WHERE klausulen
Avatar billede Slettet bruger
21. november 2004 - 20:06 #18
Har lige kigget lidt og det burde nok være

UPDATE postnr SET bynavn = TRIM(BOTH ' ' FROM bynavn) WHERE postnr != '959595959'
Avatar billede baitianlong Nybegynder
21. november 2004 - 21:04 #19
Der er stadig berørte rækker på 0, men pyt med det. Du har forlængst løst mit oprindelige problem... -Resten er jo ren kosmetik :))
Avatar billede Slettet bruger
21. november 2004 - 21:45 #20
Mystisk..det fungerer her hos mig :/
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