Tabelle Maschinen für Service updaten

Kampfgummibaerlie

Datenbank-Guru
Beiträge
743
Ich bin (nach wie vor :D) am Werk, und habe gerade folgendes Problem:

Ich möchte nur EINE Maschine updaten, wobei ich nur den Maschinentypen angebe, falls eine kurzerhand Betriebsunfähig wird.

Ich habe mir bisher folgende Funktion gebaut, welche aber alle Maschinen-IDs selected, und nicht nur eine, trotz des Limits...

Hier meine Funktion:
Code:
create or replace function maschinen_id_2_typ(x integer) returns integer as $$
select id from maschinen where typ = x and service is null limit 1
$$ language sql;

Und jetzt dann noch die Update-Query:
Code:
update maschinen set service = tsrange(now()::timestamp, 'infinity'::timestamp)
where maschinen.id = maschinen_id_2_typ(1)
and maschinen.service = null;
select * from maschinen;

Gibt es auch bei meinem jetzigen Versuch irgendeine Möglichkeit mit count(1) oder so?

(Bin inzwischen schon am Python lernen, damit ich auch noch ein hübsches Programm bauen kann :D)

Finde es unfassbar, wieviel ich bei meinem "Projekt" bisher übers Programmieren gelernt habe ;)
 
Werbung:
mmh, Du willst ja vermutlich nicht irgendEINE Maschine updaten. Das kann bei Deinem Ansatz nur ungefähr gelingen, wenn die Kombi aus Typ und Service eindeutig ist.
Technisch liefert deine Funktion allerdings ein Problem, wenn die Funktion mehrere Resultate ergibt.
Du bräuchtest also irgendeine andere Form von Identifikation. Haben die Maschinen Namen, Seriennummern, .. die man dafür verwenden kann und die in Deinen Tabellen hinterlegt sind?

Warum willst Du nur über den Typ arbeiten? Mir fällt dazu kein Grund ein. Zuhause hat man von jeder Maschine vielleicht nur eine, eine Waschmaschine, eine Flex, eine Bohrmaschine, eine Schlagbohrmaschine, einen Bohrhammer, aber da geht es offensichtlich schon los. Der Trend geht glaube ich steil zum dritten Akkuschrauber und zur 2. Flex (akkubetrieben).
Wenn Du das gewerblich nutzt, dürfte der Ansatz mit dem eindeutigen Typ noch schwieriger sein.
 
Geht nach wie vor um das Geschäft meiner Mutter ;)

Sie hat dort mehrere Nähmaschinen herumstehen, teilweise auch mehrere von einem Typ (Haushaltsmaschine, Overlockmaschine, Coverlockmaschine, Stickmaschine)

Von daher möchte ich in die bisher gebaute Homepage per Knopfdruck nur eine Maschine des Typs so oder so auf Service schicken.
Damit ich ins Detail gehe:
Sie hat 4 Haushaltsmaschinen, 2 Overlockmaschinen, 1 Coverlockmaschine und 1 Stickmaschine...

EDIT:
Selbstverständlich hat jede Maschine eine eigene ID ;)
Dennoch würde ich gerne nur den Typ auswählen, und auf Service schicken :D
 
Ok, es soll komfortabel sein, aber wie soll das mit dem Typ allein gehen, wenn es von einem Typ 2 oder 4 Maschinen gibt?

Falls Dir tatsächlich egal ist, welche es ist, könntest Du wirklich mit Limit arbeiten, aber woher weiß dann die DB, ob der Mensch die gleiche Maschine zum Service geschickt hat, wie die DB?
 
es ist ansich egal, welche der 4 Maschinen vom Typ auf Service geschickt werden, und ja, ich möchte es möglichst simpel und einfach gestalten ;)

Bezüglich der Frage:
Das wäre nicht relevant, das ist eben nur, falls eine Maschine ausfällt, schnell "außer Betrieb" setzen, vl. noch die bisher eingetragenen "Mieter" informieren, und dann wärs das schon.

Die 4 Haushaltsmaschinen sind in dem Sinne "identisch" ;)
 
Werbung:
Ich habe so meine Zweifel, ob das durchgängig im System Sinn ergibt, aber meinetwegen
Code:
UPDATE maschinen
   SET service = tsrange(now()::timestamp, 'infinity'::timestamp)
 WHERE
    id IN ( SELECT id FROM maschinen WHERE typ = x AND service is NULL LIMIT 1 )
Die Funktion brauchst Du nicht.
 
Zurück
Oben