Kleine Komplizierte Abfrage?!

kjh

Erfahrenes Mitglied
Was würdet ihr sagen, hab schon n Knotn im Kopf :-D

Ich hab Drei Felder: Auftrag, Teile und Status.

so jetzt kommt es vor, dass die Teile zwei verschiedene Status(e) haben (geliefert/nicht geliefert) in zwei Zeilen... Wie muss jetzt meine Abfage lauten?

SELECT *** from *** WHERE Status = geliefert && Status = nicht geliefert GROUP BY teile


:-(

danke

kjh
 
Kannst du mal bitte ein paar Beispieldatensätze posten? Du hast bei mir mit deiner Beschreibung einen Knoten im Kopf verursacht :p
 
SELECT * FROM Kalender where k_datum >= CURDATE() AND k_beginn > CURTIME() ORDER BY k_datum LIMIT 1,1

so zum Beispiel hab ich es eben noch benutzt
 
Huber Wasserhahn bestellt
Huber Wasserhahn geliefert
Huber Dönerspieß bestellt

Meier Dichtung bestellt
Meier Dichtung geliefert
Meier Lenkrad bestellt
Meier Lenkrad geliefert
Meier Hupe bestellt

so ist das gespeichert. Ich möchte jetzt herausfinden welche Bestellung bereits geliefert ist und welche noch aussteht, anhand davon, dass ich erstmal alle gelieferten herausfiltere.
Praktisch dann mit diesem Ergebinis:

Huber Wasserhahn bestellt
Huber Wasserhahn geliefert

Meier Dichtung bestellt
Meier Dichtung geliefert
Meier Lenkrad bestellt
Meier Lenkrad geliefert

Sorry für den Knoten im Kopf :-D :-D und danke für eure Bemühungen! Der Tipp mit dem AND ist auch nicht schlecht! :-)

kjh
 
Etwas schlecht dein Datenbankaufbau.

Ich hätte die Tabelle so aufgebaut:
  • Kundennummer, Datentyp INT oder TEXT
  • Artikelnummer, Datentyp INT oder TEXT
  • Bestellt, Datentyp DATE oder TIMESTAMP
  • Geliefert, Datentyp DATE oder TIMESTAMP, Standardwert=0
Das INT oder TEXT sind die Werte(Primärschlüssel) aus Kunden- und Artikeltabelle.

Bei einer Lieferung wird der Zeitwert 0 von Geliefert einfach durch den jetztigen Zeitpunkt (NOW()) mittels UPDATE-Statement geändert.

Und dann hätte ich für alle gelieferten Artikel geschrieben:
SELECT * FROM tabelle WHERE Geliefert NOT LIKE '0';

Und für alle noch nicht gelieferten eben :
SELECT * FROM tabelle WHERE Geliefert LIKE '0';

Ist doch viel einfacher, oder?

Die Where-Klausel in (my)Sql gilt immer nur für einen Datensatz, nicht für mehrere.
 
Zuletzt bearbeitet:
Im Prinzip hat VBFreak schon recht mit dem nicht ganz günstigen Tabellenaufbau. Falls der Tabellenaufbau aber nun eben mal so ist und Du ihn als gegeben hinnehmen musst:

Noch offene Bestellungen:
Code:
SELECT
  *
FROM
 tabelle AS best
LEFT JOIN
 tabelle AS lief
  ON     best.adresse = lief.adresse
     AND best.artikel = lief.artikel
     AND lief.status = 'geliefert'
WHERE
 lief.adresse IS NULL
Gelieferte Bestellungen: Ändere IS NULL in IS NOT NULL

Hab's nicht getestet, könnten also durchaus ein Tipp- oder Denkfehler drin sein.
Martin
 
Zurück