Mysql, nicht MSSQL
In Tabelle a befinden sich verschiedene Produkte, in Tabelle b die jeweiligen Angebote.
Anfänglich hatte ich diese in 2 separaten Abfragen abgearbeitet, also zu jedem Produkt die Anzahl und den kleinsten Preis der jeweiligen Angebote abgefragt. Aufgrund geänderter Anforderungen muss ich diese jetzt jedoch zu einer Abfrage zusammenfügen, was defakto auch kein Problem darstellt.
Jedoch setze sich die WHERE-Klausel der inneren Abfrage aus folgenden Überprüfungen zusammen:
Dies ist erforderlich, da beispielsweise nicht jedem Produkt ein Wert für EAN zugewiesen ist.
So, nun habe ich meine Abfragen mittels Subselects und folgender WHERE-Klausel zusammengefügt:
Allerdings scheint es, als würde die WHERE-Klausel im Subselect nicht beürcksichtigt.
Die gesamte Abfrage:
Edit: Gelöst. Klassisches NULL-Problem.
In Tabelle a befinden sich verschiedene Produkte, in Tabelle b die jeweiligen Angebote.
Anfänglich hatte ich diese in 2 separaten Abfragen abgearbeitet, also zu jedem Produkt die Anzahl und den kleinsten Preis der jeweiligen Angebote abgefragt. Aufgrund geänderter Anforderungen muss ich diese jetzt jedoch zu einer Abfrage zusammenfügen, was defakto auch kein Problem darstellt.
Jedoch setze sich die WHERE-Klausel der inneren Abfrage aus folgenden Überprüfungen zusammen:
PHP-Code:
if($ean) $str = "`ean` = '$ean'";
if($isbn)
{
if($str) $str .= " OR `isbn` = '$isbn'";
else $str = "`isbn` = '$isbn'";
}
if($name)
{
if($str) $str .= " OR `article` = '$name'";
else $str = "`article` = '$name'";
}
So, nun habe ich meine Abfragen mittels Subselects und folgender WHERE-Klausel zusammengefügt:
Code:
WHERE (a.article = b.article AND a.article IS NOT NULL) OR (a.isbn = b.isbn AND a.isbn IS NOT NULL) OR (a.ean = b.ean AND a.ean IS NOT NULL)
Die gesamte Abfrage:
Code:
SELECT a.*, (SELECT MIN(b.price) FROM `shops_products` b WHERE (a.article = b.article AND a.article IS NOT NULL) OR (a.isbn = b.isbn AND a.isbn IS NOT NULL) OR (a.ean = b.ean AND a.ean IS NOT NULL) AND b.deleted IS NOT NULL) AS min FROM `products` a WHERE `category` = '$CATID' AND a.deleted IS NULL ORDER BY a.article ASC LIMIT $_START, $_PPP