2012-04-03 13 views
1

Ich versuche, ein Programm durchzugehen, um zu prüfen, ob Gutscheine innerhalb einer Gutschchtabelle gültig sind.Bedingte innere Verknüpfung basierend auf dem Inhalt der primären Tabelle

Es gibt einige einfache Validierungsaspekte, z. B. ob der Gutschein abgelaufen ist oder nicht, aber auch einige Gutscheine können bedingt sein, wenn ein Kunde bestimmte Produkte nach Marke oder Lieferanten kauft.

Also, ich habe Tabelle von Gutscheinen

id |  brand  |  supplier | value etc 

eine Tabelle der Marken

id  |  name  etc 

und eine Tabelle mit den Lieferanten

id  |  name  etc 

Wenn ein Gutschein zu einer Marke ist nicht spezifisch oder Lieferant, dann ist der Wert in der Gutscheinen Geschichte 0

Ich habe versucht, diese Sql-Abfrage innerhalb der Tabellen, aber ich bekomme keine Ergebnisse, ich nehme an, dies ist, weil der Gutschein-Code (ID) versuche ich zu verwenden ist nicht spezifisch für eine Marke oder einen Anbieter?

SELECT *, brands.name as brandName, suppliers.name as supplierName 
    FROM `vouchers` 
    INNER JOIN brands on vouchers.brand = brands.id 
    INNER JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "' 

Wie würde ich dies schreibe, so dass die in der Tabelle Verbindungs ​​brands auf dem Wert brand in der Tabelle abhängig ist vouchers ist größer als 0 (und dann simiarly für Lieferanten)

ich einen Blick gehabt haben hier und sehen Sie einige andere Fragen gepostet, aber ich fürchte, ich verstehe nicht vollständig die Antworten auf sie in der Lage, sie auf meine Situation zu beziehen.

Benutzung von MySQL-Datenbank, die von der Art und Weise :-)

+0

Warum würden Sie einen bedingten Join durchführen? Verwenden Sie einen 'LEFT JOIN' anstelle von' INNER JOIN'. Wenn Sie Null-Datensätze erhalten, bedeutet dies, dass für einen bestimmten Datensatz keine Ergebnisse gefunden wurden. Dann wenden Sie Logik in Ihrer Anwendung an, wenn nicht null - Marken wurden gefunden, wenn null - keine Marken. Verwenden Sie keine Logik auf der Datenbankebene. –

+0

Als Antwort darauf, einfach weil ich mit Sql Quatsch bin !! –

Antwort

1

Warum gehst du nicht einfach eine LEFT JOIN tun, anstatt wie folgt aus:

SELECT *, brands.name as brandName, suppliers.name as supplierName 
    FROM `vouchers` 
    LEFT JOIN brands on vouchers.brand = brands.id 
    LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
    WHERE vouchers.id= '" & voucherCode & "' 

Dies wird alle vouchers egal zurück, wenn sie brands haben oder suppliers

+0

@Jamie Hartnoll: Denken Sie daran, upvote, wenn Sie denken, die Antwort ist gut. Es gibt uns alle warm-fuzzy Gefühle – Arion

0

Vorausgesetzt, dass Sie nur gültige Gutscheine zurückkehren möchten, versuchen:

SELECT *, brands.name as brandName, suppliers.name as supplierName 
FROM `vouchers` 
LEFT JOIN brands on vouchers.brand = brands.id 
LEFT JOIN suppliers on vouchers.supplier = suppliers.id 
WHERE vouchers.id= '" & voucherCode & "' and 
     vouchers.brand = coalesce(brands.id, 0) and 
     vouchers.supplier = coalesce(suppliers.id, 0) 
Verwandte Themen