Nochmal

Nochmal

am 27.03.2007 13:05:43 von Mathias Fiedler

Hallo,
ich muß nun noch einmal nachfragen.
Die Testabfrage funktioniert eignetlich schon. Nur in meiner richtigen
Abfrage, die um einiges umfangreicher ist, klappt das nicht. Wo könnte denn
da der Fehler liegen?

Hier die Abfrage:

(SELECT
a.articleID,a.articleNumber,a.articleName,a.width,a.length,a .code,coalesce(case
when a.cost <> t.cost AND t.custumerID = 8 then a.cost else t.cost end,
a.cost),a.inventory,a.articleNumberSelf,a.charge,a.sonder,d. design,c.colorWert,c.colorName,p.pathLong,p.pathShort,s.devi ce,s.short,st.stil,di.company,de.short,de.description,a.cate gorieID,a.valuation
FROM article as a LEFT JOIN t1_custumercost as t ON a.articleNumberSelf =
t.articleNumberSelf INNER JOIN design as d ON a.designID = d.designID INNER
JOIN color as c ON a.colorID = c.colorID INNER JOIN path as p ON
a.articleNumberSelf = p.articleNumberSelf INNER JOIN sellingdevice as s ON
a.sellingID = s.sellingID INNER JOIN stil as st ON a.stilID = st.stilID
INNER JOIN distributor as di on a.distributorID = di.distributorID INNER
JOIN description as de ON a.descriptionID = de.descriptionID WHERE
(a.charge <> 'TestWahl_KA_2 modern') AND (a.categorieID = 5) AND
(a.articleID <> 2)) UNION (SELECT
a.articleID,a.articleNumber,a.articleName,a.width,a.length,a .code,coalesce(case
when a.cost <> t.cost AND t.custumerID = 8 then a.cost else t.cost end,
a.cost),a.inventory,a.articleNumberSelf,a.charge,a.sonder,d. design,c.colorWert,c.colorName,p.pathLong,p.pathShort,s.devi ce,s.short,st.stil,di.company,de.short,de.description,a.cate gorieID,a.valuation
FROM t1_custumerarticle as a LEFT JOIN t1_custumercost as t ON
a.articleNumberSelf = t.articleNumberSelf INNER JOIN design as d ON
a.designID = d.designID INNER JOIN color as c ON a.colorID = c.colorID
INNER JOIN path as p ON a.articleNumberSelf = p.articleNumberSelf INNER
JOIN sellingdevice as s ON a.sellingID = s.sellingID INNER JOIN stil as st
ON a.stilID = st.stilID INNER JOIN distributor as di on a.distributorID =
di.distributorID INNER JOIN description as de ON a.descriptionID =
de.descriptionID WHERE (a.charge <> 'TestWahl_KA_2 modern') AND
(a.categorieID = 5) AND (a.articleID <> 2)) ORDER BY
charge,valuation,articleName

Alle Werte sind in den Tabellen vorhanden. Ohne das coalesce funktiniert
die Abfrage auch tadellos.
In dieser Form wie oben, bekomme ich nicht den Preis aus der Usertabelle,
sondern den Preis der allgemeinen tabelle.

Zum Verständnis:
Die Tabelle Artikel enthält alle allgemeinen Artikel
Die Tabelle t1_custumerarticle ist "baugleich" mit article. Nur das dort
Artikel stehen, die nur einem speziellen Kunden zugeordnet sind. Diese
beiden tabellen unterscheiden sich wirklich nur nach dem Namen.
Die dritte Tabelle, t1_custumercost, enthält die ArtikelID, die
custumerNumber und einen speziellen Preis. Das sind Sonderpreise für
allgemeine Artikel, die wieder nur ein spezieller Kunde hat.

Nun muß ich also die Ergebnismenge aus article und t1_custumerarticle
bilden (funktiniert mit UNION sehr gut) und gleichzeitig noch für jeden
gefundenen Datensatz fragen, ob für den angemeldeten User für diesen
Artikel ein Sonderpreis festgelegt wurde. Gibt es einen Sonderpreis, soll
der genommen werden ansonsten der Preis aus article oder
t1_custumerarticle, je nachdem in welcher Tabelle der Artikel steht.
Anscheinend habe ich das aber ein Communikationsproblem mit mysql, denn die
ausgabe ist nicht die, die ich möchte.

mfg

Mathias

Re: Nochmal

am 27.03.2007 13:07:11 von Mathias Fiedler

Entschuldigung.
der Artikel war als Antwort auf den Hinweis von Andreas gedacht, ist m ir
aber als nuer Beitrag rausgegangen, deshalb der etwas wenig aussagekräftige
Titel.

Mathias