MySQL Query Hilfe benötigt :)

Jeazyee

Benutzer
Beiträge
5
Hey,

ich versuche gerade von meiner DB "login" die Tabelle "account" zu öffnen, und da aus der Spalte "name" einen %name% zu suchen, und wenn der gefunden wurde soll aus der Reihe wo der %name% drin steht in der Spalte "punkte" dem bereits bestehendem Wert der Wert %pluspunkte% hinzugefügt bzw. addiert werden.

Hört sich kompliziert an aber ist es für euch bestimmt nicht, ich weiß leider nicht wie ich vorgehen soll, da ich in dem Gebiet ein kompletter Anfänger bin.

Hier mal mein Ansatz:

Code:
SELECT * FROM account WHERE name LIKE '%name%'

weiter wie so schaff ichs nicht hoffe ihr könnt mir weiterhelfen :)

Grüße Jeazyee
 
Werbung:
Hey,

ich versuche gerade von meiner DB "login" die Tabelle "account" zu öffnen, und da aus der Spalte "name" einen %name% zu suchen, und wenn der gefunden wurde soll aus der Reihe wo der %name% drin steht in der Spalte "punkte" dem bereits bestehendem Wert der Wert %pluspunkte% hinzugefügt bzw. addiert werden.

Hört sich kompliziert an

Ja. Geht via UPDATE. Hier die Syntax:

Code:
test=# \h update
Command:  UPDATE
Description: update rows of a table
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
  SET { column_name = { expression | DEFAULT } |
  ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...]
  [ FROM from_list ]
  [ WHERE condition | WHERE CURRENT OF cursor_name ]
  [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

Ist in MySQL vermutlich ähnlich.

Code:
update <tabelle> set <spalte> = <spalte> + <wert> where <andere_spalte> = 'suchwert'

Das anzupassen überlasse ich Dir zur Übung. Sollst ja auch was lernen.
 
Danke für die Antwort, hier mein Versuch:

Code:
UPDATE account SET punkte = punkte + '15' where name = 'testacc'

hab es mehrmals probiert aber hat leider keine punkte hinzugefügt bzw. nichts gemacht -.-
 
Danke für die Antwort, hier mein Versuch:

Code:
UPDATE account SET punkte = punkte + '15' where name = 'test'

hab es mehrmals probiert aber hat leider keine punkte hinzugefügt bzw. nichts gemacht -.-

Auf was steht denn punkte jetzt? Laß mich raten: auf NULL. Ich schenke Dir ein COALESCE.

Code:
test=*# select null + 1;
 ?column?
----------

(1 row)

Time: 0,138 ms
test=*# select coalesce(null,0) + 1;
 ?column?
----------
  1
(1 row)
 
Danke für die Antwort, hier mein Versuch:

Code:
UPDATE account SET punkte = punkte + '15' where name = 'testacc'

hab es mehrmals probiert aber hat leider keine punkte hinzugefügt bzw. nichts gemacht -.-

Davon abgesehen: wenn die Punkte-Spalte ein INT ist (was ich vermute), dann macht es keinen Sinn, da einen String zu addieren, auch wenn es vermutlich automatisch passend gecastet wird.
 
Der test hat bereits 20Punkte jetzt sollen ihm 15 hinzugefügt werden

Code:
USE login; 
UPDATE account SET punkte = punkte + '15' where name = 'test';

das gebe ich ein und dann kommt der Fehler:

Code:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE account SET punkte = punkte + '15' where name = 'test'' at line 3
 
Der test hat bereits 20Punkte jetzt sollen ihm 15 hinzugefügt werden

Code:
USE login;
UPDATE account SET punkte = punkte + '15' where name = 'test';

das gebe ich ein und dann kommt der Fehler:

Code:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE account SET punkte = punkte + '15' where name = 'test'' at line 3


Dann ist da wohl was kapott...

Code:
test=*# create table account(name text, punkte int);
CREATE TABLE   
Time: 14,420 ms
test=*# insert into account values ('test', 0);
INSERT 0 1
Time: 0,393 ms
test=*# insert into account values ('test2', 20);
INSERT 0 1
Time: 0,248 ms
test=*# select * from account ;
 name  | punkte
-------+--------
 test  |  0
 test2 |  20
(2 rows)

Time: 0,205 ms
test=*# update account set punkte = punkte + 10 where name = 'test';
UPDATE 1
Time: 0,321 ms
test=*# select * from account ;
 name  | punkte
-------+--------
 test2 |  20
 test  |  10
(2 rows)

Time: 0,188 ms
test=*# rollback;
ROLLBACK
 
Werbung:
Zurück
Oben