Hauptmenü

Untermenü

PHP/MySQL - Praxistutorial 3 - Zusatzbedingungen

1. Die Abschnitte

2. Erweiterungen

Bisher haben wir nach gewissen Kriterien einfach alle Datensätze geholt, die vorhanden sind. Jetzt geht es um weitere Einschränkungen, die man direkt in den SQL-Abfragen vornehmen kann. Dazu nehmen wir die beiden bereits verwendeten Dateien data/produkte.php und data/kunden.php. Aus Anschauungsgründen zeige ich euch nur die Abfragen. Einbauen und verarbeiten müsst die selbst. Und das gilt auch für das Verstehen. So schwer ist das nun wirklich nicht.

3. Einschränkung der Produkte

Bisher haben wir in der data/produkte.php uns alle Produkte geholt, zu denen es einen Hersteller gibt. Wenn man sich da zum Beispiel nur diejenigen ausgeben lassen möchte, deren Preis einen bestimmten Wert überschreitet, so packt man das einfach in eine WHERE-Bedingung.


SELECT 
  p.produkt,
  p.preis,
  h.zulieferer
FROM
  produkt p
INNER JOIN  
  hersteller h ON p.hs_link h.id
WHERE 
  p.preis 20                
ORDER BY
  produkt

Vielleicht versteht ihr jetzt, warum der Theta Join nicht gerne gesehen ist. Denn bei einem INNER JOIN ist das Ziel der Abfrage deutlicher zu erkennen. Und das ist besonders wichtig, wenn man mit mehreren Entwicklern zusammenarbeitet. Ansonsten brauche ich zur Abfrage wohl nichts mehr zu sagen. Das ist Hödelpups.

4. Einschränkung der Kunden

Vorab! Welche Datei ihr dafür benutzt, sag ich euch nicht mehr. Ätsch! Will man also zum Beispiel herausfinden, wessen Zahlungsmoral nicht so prickelnd ist, dann hat man zwei Möglichkeiten. Man kann dann den Eintrag in der Tabelle zahlungsmoral auf einen bestimmten Wert hin prüfen, also so.


SELECT 
  k.doktor,
  k.telefon,
  z.art
FROM
  kunde k
LEFT JOIN
   zahlungsmoral z ON k.zm_link z.id
WHERE 
  z.art != 'sehr gut' AND z.art != 'gut'    
ORDER BY doktor'

Wer hier nicht sauber arbeitet, bekommt einen Parse error um die Ohren gehauen. Und woran liegt das wohl? Genau! An den Hochkommate, die ihr Torfnasen mal wieder nicht korrekt escaped habt.

Aber!

Ihr seht keine Kunden, bei denen es noch keinen Eintrag zur Zahlungsmoral gibt. Darum muss man die WHERE-Bedingung entsprechend anpassen und für eine saubere Logik bei z.art mit Klammern arbeiten, um die Bedingung zu bündeln. Aber das kennt ihr ja schon.


SELECT 
  k.doktor,
  k.telefon,
  z.art
FROM
  kunde k
LEFT JOIN
  zahlungsmoral z ON k.zm_link z.id
WHERE (z.art != 'sehr gut' AND z.art != 'gut')  
   OR k.zm_link IS NULL 
ORDER BY doktor

Natürlich gibt es für so einen Fall auch noch andere Möglichkeiten. Aber damit könnt ihr euch ja jetzt selber beschäftigen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt