Hallo Kermit,
am besten lässt man das PHP-Geraffel weg, wenn es um ein SQL-Statement geht. JOIN-Syntax zu benutzen ist ebenfalls eine gute Idee und dann haben wir
select distinct(p.produkt_id), p.name, at.AT_Katalognr, ty.Typ_Name from products p, producttyp at, productcategorie ptc, typ ty where p.bezeichnung LIKE '%$name%' and at.ID=p.produkt_id ty.ID = at.ID and ptc.id=p.produkt_id and ptc_kategorie !='13' order by at.AT_Release desc");
SELECT DISTINCT -- wieso eigentlich DISTINCT?
p.produkt_id,
p.name,
at.AT_Katalognr,
ty.Typ_Name
FROM products p
INNER JOIN producttyp at
ON p.produkt_id = at.ID
INNER JOIN productcategorie ptc
ON p.produkt_id = ptc.id
INNER JOIN typ ty
ON at.ID = ty.ID
WHERE ptc_kategorie != 13 -- wenn das Zahlen sind, weg mit den
-- einfachen Anführungszeichen
AND p.bezeichnung LIKE '%[code lang=php]$name
~~~%[/code]
So haben wir schon eine viel übersichtlichere und leichter verständliche SQL-Anweisung.
> Soweit so gut, aber mein Problem ist, daß ein Prodkut mehreren Kategorien zugeteilt sein kann und durch die obere Abfrage bekomme ich dann natürlich auch die Produkte angezeigt, die z.B. sowohl der Kategorie 13 als auch der Kategorie 14 zugeteilt sind (ist ja klar) aber ich will wenn ein Produkt der 13 zugeteilt ist, dieses Produkt nicht angezeigt bekommen, egal in welchen anderen Kategorien es sonst noch vorkommt.
Hmm, eigentlich ein typischer Fall für Subselects - aber das setzt MySQL 4.1 voraus, über das Du nicht verfügst.
> Außerdem will ich jedes Produkt nur einmal dargestellt bekommen, egal wievielen Kategorien es zugeteilt ist. Die Kategorie ist für die Anzeige vollkommen egal, die wird nur gebraucht, um alle Produkte aus der 13 auszuschließen.
Aha, daher Dein Versuch mit DISTINCT :-)
Nein, das ist der falsche Ansatz. Ich fürchte fast, dass Du mit MySQL 4.0 nicht weiterkommst. Was Du haben willst, schreit an den verschiedensten Stellen nach Subselects. Die gibt es aber erst ab MySQL 4.1 :-(
Ob Du Deine Anforderungen mit den Beschränkungen von MySQL 4.0 umsetzen kannst, das kann ich im Moment leider nicht abschätzen.
Freundliche Grüße
Vinzenz