# UPDATE user



## Sakura26 (13. Nov 2012)

Hallo allerseits, 

ich brauche umbedingt Hilfe bei folgenden Query: 

UPDATE user SET firstDay = (SELECT date FROM entry WHERE user = 121 order by date ASC limit 1) WHERE id = 121

und zwar habe ich ein neues Feld in der Tabelle user eingefügt, dieses Feld zeigt an wann der erste Eintrag (Datum) in der entry Tabelle gemacht wurde. Nun möchte ich nicht die ID für jeden User ändern und diesen Query ausführen. Wie kriege ich es hin das für jeden User individuell ein Datum herausgenommen wird und in firstDay eingetragen wird. Wie ist es auch möglich für user die keine Einträge hatten, ein Default Datum einzutragen. 

Vielen Dank im vorraus.


----------



## nillehammer (13. Nov 2012)

> Wie ist es auch möglich für user die keine Einträge hatten, ein Default Datum einzutragen.


Bei Erstellung der Tabelle kann man Spalten mittels des Schlüsselwortes DEFAULT einen default value zuweisen. Der wird dann bei allen INSERTs genommen, wenn für die Spalte kein anderer Wert angegeben wurde.

Im Nachhinein geht es auch mit einem UPDATE-Statement, ungefähr so:

```
UPDATE user SET firstDay = <DefaultWert> WHERE firstDay IS NULL
```


----------



## SlaterB (13. Nov 2012)

und was macht
> UPDATE user SET firstDay = (SELECT date FROM entry WHERE user = id order by date ASC limit 1)
sofern nur in user eine Spalte id besteht?

bzw. irgendwie an ein Attribut von 'user' rankommen, evtl. mit Alias,
ne genauere Antwort wäre wünschenswert, aber bevor gar nichts dazu steht


----------



## mla.rue (14. Nov 2012)

du kommst nicht drumherum die sqlQuery auf jeden User einzeln anzuwenden, zum Default hast du ja schon eine Antwort


----------



## SlaterB (14. Nov 2012)

@mla.rue
starke ausschließende Ansage, hast du da wirklich gesicherte Erkenntnisse?

ich kann es selber gerade nicht testen, habe aber zumindest jetzt nochmal nach 'update select' gesucht,
etwa
SQL: UPDATE Statement
mit
[sql]
UPDATE suppliers
SET supplier_name = (SELECT customers.name
                     FROM customers
                     WHERE customers.customer_id = suppliers.supplier_id)
WHERE EXISTS (SELECT customers.name
              FROM customers
              WHERE customers.customer_id = suppliers.supplier_id);
[/sql]
nicht ganz mein vorheriger Plan aber schon die richtige Richtung, 
EXISTS hilft bei der Unsicherheit was passiert wenn eben nichts zu finden ist


----------

