zurzeit freie Maschinen zählen, und auch andere Columns selecten

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Also, nachdem ich (wieder) an er guten alten Datenbank arbeite, bin ich auf folgendes Problem gestoßen:

Ich würde gerne (habe auch jede Menge alte Threads durchsucht und probiert) ein jede maschinen_id counten, die >zurzeit< frei ist. Hier interessieren mich aber (eben) auch einige andere Werte aus der Tabelle "Maschinen".

Mein Code würde bisher so aussehen:
Code:
select count(maschinen_id), maschinen_name, maschinen_mietpreis from maschinen expect select maschinen_id from vermietungen where mietzeit @> now()::timestamp group by maschinen_name;

Bei diesem Szenario meckert er wegen dem 2. select, nach dem expect rum.

Ich mache mal die Fenster auf, mir wird heiß ^^
 
Werbung:
gibt es das gegenteil vom Commando "@>" ?

Weil ich glaube, der prüft, ob es außerhalb einer range ist.
Ich bräuchte aber genau das gegenteil, sprich ob es in einer range ist...
 
  • Abfragen mit Aggregationsfunktionen müssen alle nicht-aggregierten Spalten gruppieren
  • expect gibt es nicht als Schlüsselwort, daher wird das hier als Alias interpretiert
  • solltest Du except meinen, dann muß diese Abfrage die gleichen Spalten (Anzahl, Typ) wie die andere Seite vom except liefern
 
Danke für die Hilfe ;)

Code:
select count(maschinen_id), maschinen_mietpreis, maschinen_name from maschinen
group by maschinen_name, maschinen_mietpreis
except
select maschinen_id, maschinen_mietpreis, maschinen_name from maschinen
where maschinen_name is null;

funktioniert nun, der nächste Schritt für mich wäre, dass ich jetzt noch nur die freien maschinen zähle, weil ich würde auf der Homepage (noch nur offline) einbauen, dass auf der Willkommens-Page steht in etwa:
"Wir haben zurzeit noch x Maschinen des Typs y frei, welche wir um günstige z vermieten, also melden sie sich bei uns zum nähen an, um einen Platz in unserem Cafe zu besetzen"

.... oder möchte ich zuviel? ^^

EDIT: Ich hätte eine Funktion, die de freien Maschinen zählt, sieht so aus:
Code:
select maschinen_id, maschinen_name, maschinen_mietpreis from maschinen except
select maschinen_id, maschinen_name, maschinen_mietpreis from vermietungen
where mietzeit @> now()::timestamp;

Die Funktion hat keinen Parameter, werde ich wohl noch einbauen irgendwann, damit er die wählt, die einen Namen der vorhin gruppierten Namen haben.

EDIT2:
Bin wohl auch nicht so am laufenden, habe mein Problem daweil so gelöst, muss aber noch den Test bestehen ^^

Code:
select count(id), name, mietpreis from alle_freien_maschinen()
group by name, mietpreis

EDIT3:
Soda, jetzt bin ich wieder bei einem bisherigen Problem, ich suche das Gegenteil von @>, gibt es @= ?

TRY AND ERROR, wie immer :D
 
Zuletzt bearbeitet:
Also, damit sich alle auskennen, schreibe ich, was ich auf der Homepage gerne "anzeigen" würde (über eine PG_Query):

Wir haben zurzeit noch x Maschinen des Typs y frei, welche wir um jeweils z € pro Stunde vermieten, und freuen uns auf Ihren Besuch!

Ich glaube, ich mache mal ne Pause (was essen und so ^^)

Also, bis am Nachmittag oder Abend :D
 
Sitze immernoch an dem Problem... Bin seit paar Tagen wieder mehr dabei ^^

Also, er sähe so aus:
Code:
select count(m_maschinen_id), m_maschinen_name from maschinen group by m_maschinen_name except select maschinen_id, maschinen_name
from vermietungen where mietzeit @> now()::timestamp group by maschinen_id, maschinen_name

der Code funktioniert zwar, aber obwohl ich 1 Maschine in der Tabelle "vermietungen" hätte, zeigt er mir trotzdem alle an. (Habe in Summe 16 Maschinen in der Tabelle, um das Ganze zu probieren und so).

Wäre auch in diesem Fall sehr dankbar über die richtige Korrektur (werde natürlich auch selbst daran arbeiten)...
 
Beides Obst?

Scherz beiseite....

Wie darf ich das verstehen?

habe mich die letzte Zeit zu sehr auf php konzentriert, denke, dass ich den richtigen Mittelweg finden sollte (Merkfähigkeit eben, wie im Alter, man vergisst immer schneller)
 
erster Abfrageteil liefert die Anzahl der ID's eines Maschinennamens. Wenn die ID hier der primary key ist, ist das immer 1.
zweiter Abfrageteil liefert id und Namen von Maschinen.
Du bildest dann quasi die Differenz einer Anzahl und einer ID.
 
Werbung:
Sodala, ich bin wieder auf der Jagt, nach dem Ball, und muss sagen, Pausen lohnen sich xD Ich glaube, ich werde zu eifrig, wenn ich an etwas sitze......

Habe das ganze momentan über 2 Funktionen gelöst:

1. Funktion: name_2_id
Code:
select maschinen_name from maschinen where maschinen_id = x

2. Funktion: all_free_machines
Code:
select  maschinen_name, maschinen_id from maschinen group by maschinen_name, maschinen_id
except select name_2_id(maschinen_id), maschinen_id from vermietungen where mietzeit @> now()::timestamp order by maschinen_id

Denke ich, ist für mich eine aktzeptable Lösung, und, falls es modischer lösbar ist, bitte nicht sagen :)
Freue mich jedoch, dass ihr mich bisher auf diesen Weg gebracht habt.
 
Zurück
Oben