Verknüfung mehrerer Tabellen

stella21

Benutzer
Beiträge
11
Hallo zusammen,

ich habe folgendes Problem. Ich habe drei Tabellen und versuche dieses miteinander zu verknpüfen.
Das Ergebnis der folgenden SQL Anweisung liefert jedoch ein leeres Resultat zurück

Code:
SELECT a.uid, a.title, c.title
FROM
tx_news_domain_model_news as a,                       
tx_news_domain_model_news_category_mm as b,
tx_news_domain_model_category as c
WHERE
a.uid = b.uid_local AND b.uid_foreign = c.uid AND c.parentcategory=6 AND b.uid_foreign=1

Die SQL Anweisung liefert ein Ergebnis wenn ich die letzten AND Anweisung "b.uid_foreign=1" weglasse.

Jedoch brauche ich unbeding diese letzte Anweisung da diese aus einem Filter kommt. Wie kann ich die SQL Anweisung also bauen damit dies auch richtig funktioniert.

Der Fehler momentan liegt ja daran dass ich in der Where Klausel vorher b.uid_foreign = c.uid und danach b.uid_foreign=1 schreibe.

Bin über jede Hilfe dankbar!!!!!
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.150
Hallo zusammen,

ich habe folgendes Problem. Ich habe drei Tabellen und versuche dieses miteinander zu verknpüfen.
Das Ergebnis der folgenden SQL Anweisung liefert jedoch ein leeres Resultat zurück


Der Fehler momentan liegt ja daran dass ich in der Where Klausel vorher b.uid_foreign = c.uid und danach b.uid_foreign=1 schreibe.

Bin über jede Hilfe dankbar!!!!!

Ohne die Tabellen zu kennen ist es schwer, Dir zu helfen. Bitte stelle das auch um, so daß Du da expliziete JOINs nutzt. Das ist besser lesbar und verhindert Fehlinterpretationen. Statt viele Ausrufezeichen also mal die Tabellen und paar Datensätze zeigen.
 

ukulele

Datenbank-Guru
Beiträge
4.409
Eigentlich ist die Syntax deiner Abfrage intakt. b.uid_foreign = c.uid und b.uid_foreign=1 könnte man sicher auch anders schreiben mit dem selben Ergebnis, die Frage ist ob die IDs logisch verknüpft sind. Das geht aber aus deinem Post nicht hervor.
 

stella21

Benutzer
Beiträge
11
Hallo,

also insgesamt sind es ja die drei Tabellen.

Tabelle 1: tx_news_domain_model_news

uid title
6 Produkt A
7 Produkt B
8 Produkt C
9 Produkt D
usw.

Tabelle 2: tx_news_domain_model_news_category_mm

uid_local uid_foreign
6 66
usw.

Tabelle 3:tx_news_domain_model_category

uid title parentcategory
1 Damen 9
2 Herren 9
3 Technik 9
13 Algebra 6
66 Nabuco 6
usw.

Ich hoffe es ist dadurch etwas verständlicher.

Vielleicht noch eine Info um es zu verständlicher zu machen.
Jedes Produkt (Produkt A, Produkt B usw) bekommt verschiedene Kategorien zugeordet. Die Kategorien sind folgende:
1. Typ (Damen, Herren, Technik)
2. Produktlinie (Algebra, Nabuco usw.)

Je nachdem was für ein Typ bzw was für eine Produktlinie ich auswähle, werden nur die Produkte angezeigt die dieser Kategorie entsprechen.

Wenn ich die letzte AND Anweisung "b.uid_foreign=1" weglasse, werden mir alle Typen angezeigt. Das heisst Damen, Herren und Technik. Durch die AND Anweisung "b.uid_foreign=1" wollte ich dies abfangen. Dies kollidiert jedoch mit der anderen AND Anweisung "b.uid_foreign = c.uid"

Bin über jede Hilfe dankbar.
 

akretschmer

Datenbank-Guru
Beiträge
9.150
Wenn ich die letzte AND Anweisung "b.uid_foreign=1" weglasse, werden mir alle Typen angezeigt. Das heisst Damen, Herren und Technik. Durch die AND Anweisung "b.uid_foreign=1" wollte ich dies abfangen. Dies kollidiert jedoch mit der anderen AND Anweisung "b.uid_foreign = c.uid"

Bin über jede Hilfe dankbar.

Was kollidiert da? Es gibt (in Deinem Beispiel) kein b.uid_foreign=1.

Ich schau dann noch mal genauer, aber so sehe ich erst mal kein Problem.
 

stella21

Benutzer
Beiträge
11
Wenn man im Filter z.B. Damen auswählt ist die uid_foreign -> 1
Und bei dem SQL Befehl steht ja "b.uid_foreign = c.uid" und anschließend "b.uid_foreign=1".
Hier kollidiert es ja.
 

ukulele

Datenbank-Guru
Beiträge
4.409
Wenn man im Filter z.B. Damen auswählt ist die uid_foreign -> 1
Und bei dem SQL Befehl steht ja "b.uid_foreign = c.uid" und anschließend "b.uid_foreign=1".
Hier kollidiert es ja.
Dein Select gibt dir alle Produkte aus die der Kategorie "Damen" zugeordnet sind. Da "kollidiert" nichts. Wenn du keine Produkte hast die der Kategorie Damen zugeordnet sind wird nichts angezeigt, das ist im Moment die naheliegenste Ursache für dein Problem.
 

stella21

Benutzer
Beiträge
11
Hallo,

folgende SQL Anweisung

Code:
SELECT a.uid, a.title, c.title
FROM
tx_news_domain_model_news as a,                     
tx_news_domain_model_news_category_mm as b,
tx_news_domain_model_category as c
WHERE
a.uid = b.uid_local AND b.uid_foreign = c.uid AND c.parentcategory=6 AND

liefert mit alle Ergebnisse zu allen Kategorien (seien es Damen, Herren und Technik)

Füge ich noch folgende AND Anweisung hinzu
Code:
b.uid_foreign=1
(b.uid_foreign = 1 -> Damen) liefert das Ergebnis kein Ergebnis zurück.

Irgendwo läuft da also etwas schief.

Danke
 

ukulele

Datenbank-Guru
Beiträge
4.409
Code:
SELECT    count(a.uid),
--        a.title,
        c.title
FROM    tx_news_domain_model_news AS a,                     
        tx_news_domain_model_news_category_mm AS b,
        tx_news_domain_model_category AS c
WHERE    a.uid = b.uid_local
AND        b.uid_foreign = c.uid
AND        c.parentcategory = 6
--AND        b.uid_foreign = 1
GROUP BY c.title
ORDER BY c.title
Welche Zahl steht denn da bei "Damen"?
 

stella21

Benutzer
Beiträge
11
Also Damen hat insgesamt 3 Produkte. Und genau diese wollen wir ausgeben lassen, aber sobald wir "
b.uid_foreign = 1" hinzufügen erscheint mal wieder nichts. Und wenn wir diese Anweisung weg lassen bekommen wir die Produkte zu Damen, Herren, und Technik
 

ukulele

Datenbank-Guru
Beiträge
4.409
Code:
SELECT    a.uid,
        a.title,
        c.title
FROM    tx_news_domain_model_news AS a,                     
        tx_news_domain_model_news_category_mm AS b,
        tx_news_domain_model_category AS c
WHERE    a.uid = b.uid_local
AND        b.uid_foreign = c.uid
AND        c.parentcategory = 6
AND        c.title = 'Damen'
--AND        b.uid_foreign = 1
Das sollte dann 3 Ergebnisse liefern, ist vieleicht Damen nicht die Kategorie ID 1?
 

ukulele

Datenbank-Guru
Beiträge
4.409
Sehr merkwürdig und nicht nachvollziehbar. Könnte nur noch sein das title kein VARCHAR sondern CHAR mit Leerschritten ist oder irgend so ein Schwachsinn. Es kann nicht sein das er in einer Abfrage Damen ausgibt und in der (fast) gleichen Abfrage mit title = 'Damen' keine Treffer hat. Teste bitte nochmal das hier:
Code:
SELECT    a.uid,
        a.title,
        c.uid,
        c.title
FROM    tx_news_domain_model_news AS a,                     
        tx_news_domain_model_news_category_mm AS b,
        tx_news_domain_model_category AS c
WHERE    a.uid = b.uid_local
AND        b.uid_foreign = c.uid
AND        c.parentcategory = 6
AND        c.title LIKE '%Damen%'
--AND        b.uid_foreign = 1
 

stella21

Benutzer
Beiträge
11
Geht nicht. Da muss irgendwo ein kleiner logischer Fehler sein den wir übersehen.
Titel war vom typ tinytext. hab es umgewandelt in text.
alles komisch ....
 
Werbung:
Oben