Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Verknüfung mehrerer Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von stella21, 15 Oktober 2013.

  1. stella21

    stella21 Benutzer

    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!!!!!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. stella21

    stella21 Benutzer

    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.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  6. stella21

    stella21 Benutzer

    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.
     
  7. ukulele

    ukulele Datenbank-Guru

    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.
     
  8. stella21

    stella21 Benutzer

    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
     
  9. ukulele

    ukulele Datenbank-Guru

    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"?
     
  10. stella21

    stella21 Benutzer

    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
     
  11. ukulele

    ukulele Datenbank-Guru

    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?
     
  12. stella21

    stella21 Benutzer

    MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). ( die Abfrage dauerte 0.0006 sek. )
    Damen ist die ID 1
     
  13. ukulele

    ukulele Datenbank-Guru

    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
     
  14. stella21

    stella21 Benutzer

    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 ....
     
  15. ukulele

    ukulele Datenbank-Guru

    Hat Damen eventuell nicht die parentcategory 6 sondern eine andere?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden