Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Tabellen verknüpfen (mit ID aus einer, Namen aus andere bekommen)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Tabellen verknüpfen (mit ID aus einer, Namen aus andere bekommen)

    Einen schönen Nachmittag,

    ich glaub ich bin wieder an einen Punkt angelangt an dem ich nicht weiterkommen (bzw. irgendwie einfach nicht durchblicke).
    Ich habe Daten aus zwei Tabellen:

    Produkt ("bla" stellt viele weitere daten dar, die hier nicht relevant sind):
    Code:
    ID |  KatID | UKatID | bla ..
    10 |  3     | 4      | bla ..
    11 |  5     | NULL   | bla ..
    Kategorie:
    Code:
    ID | name | parentID
    3  | blaa | NULL
    4  | blax | 3
    5  | vlax | NULL
    jetzt will ich in eine Tabelle(html) die Produktdaten eingeben, aber statt der KatID soll dort natürlich der Name aus der Tabelle mit den Kategorien stehen.

    Ich habe in meinem Buch schon einiges von Joins gelesen und damit kann ich zB die Namen abfragen:
    Code:
    SELECT kategorien.name FROM `kategorien`, `produkte` WHERE produkte.KatID=produkte.ID
    Aber wie schaff ich das, dass ich die Daten irgendwie so bekomme, dass ich sie schön mit einer Schleife in die HTML-Tabelle packen kann?

    ich habe übrigens die ähnlichen Themen die gleich auf der ersten Seite in diesem Forum waren auch gelesen, muss aber leider zugeben, dass ich damit wenig anfangen konnte

    Wäre über einen Ratschlag sehr dankbar

    lg

  • nikosch
    antwortet
    Dann benutze bitte (nachschlagen!) Aliase.

    Einen Kommentar schreiben:


  • ende_
    antwortet
    Zitat von nikosch Beitrag anzeigen
    Bisher sehe ich keien Grund, warum Du k.name zweimal bräuchtest.
    weil ich ja - falls es eine gibt - die Unterkategorie auch ausgeben möchte. Im Post zwei über diesen ist es wirklich sinnlos, aber ich wollte nur veranschaulichen wo ich es gerne hätte wenn ich wüsste wie ich es dort hinbekomme.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Bisher sehe ich keien Grund, warum Du k.name zweimal bräuchtest.

    Einen Kommentar schreiben:


  • ende_
    antwortet
    hm ... aber ich kann doch nicht zweimal "k.name" (siehe #5) verwenden, aber ich brauche eigentlich zweimal "k.name" ... wie kann ich das dann umschreiben? (und bitte schreib jetzt nicht 'verwende k.name' , ich wüsste nämlich wirklich nicht, was ich damit anfangen könnte ... ich hab mir jetzt schon einiges durchgelesen habe was ich bei einer googlesuche nach LEFT JOIN gefunden habe, darauf bin ich aber nicht gekommen ...)

    edit: habe gerade mal die WHERE Abfrage in ein JOIN umgewandelt und makiert wo ich gerne den Namen der UKat hinbekommen würde...
    Code:
    SELECT produkte.ID, name, name, Bezeichnung, Notiz, ..., ..., ...
    FROM produkte
    JOIN kategorien ON produkte.KatID = kategorien.ID
    lg

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Verwende einen "LEFT JOIN"

    Einen Kommentar schreiben:


  • ende_
    antwortet
    Okay, danke für die Antwort - war dann doch leichter als gedacht und hat so auch funktioniert. Aber jetzt habe ich noch eine andere Frage. Wie in meinem ersten Post schon ersichtlich, gibt es auch eine Unterkategorie (UKat), die kann allerdings auch NULL sein und ist ja in der gleichen Tabelle wie die normalen Kategorien. Ich habe hier Quakenet/#php Tutorial - de - Einleitung etwas darüber gelesen und demnach klingt es so als sollte ich ein "LEFT JOIN" verwenden, aber als ich versuchte dieses zu integrieren bekam ich nur Fehlermeldungen ...

    Hat diesbezüglich vielleicht noch jemand einen Tipp?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Indem Du Felder aus Produkte mit auswählst.

    Einen Kommentar schreiben:


  • ende_
    antwortet
    @unsource danke für den link, ich hab mir den ganzen oberen Teil (equi join) durchgelesen, doch konnte mir das leider nicht weiterhelfen.

    wie gesagt, soviel "join", dass er mir den dazugehörigen Namen ausgibt, habe ich bereits geschafft.
    Code:
    SELECT k.name
    FROM produkte AS p, kategorien AS k
    WHERE p.KatID = k.ID
    Doch wie bekomme ich jetzt noch die ganzen anderen Daten aus "produkte" in der gleichen Select-Abfrage? Ist das überhaupt möglich, oder sollte ich einfach zwei Anfragen machen und dann versuchen die ID durch den Namen zu tauschen?

    lg

    Einen Kommentar schreiben:


  • unsource
    antwortet
    MySQL Datenbankhandbuch: MySQL-Sprachreferenz mit vielen Beispielen: JOIN
    schau dir mal "left join" bzw "equi join" an

    Einen Kommentar schreiben:


  • ende_
    antwortet
    Indem Du Dir erstmal klar machst, wie die Daten dazu aussehen müssen. Erst denken, dann posten.
    Okay, vielen Dank erstmal für deine Antwort. Wenn du die Frage wirklich so meinst, wie ich es verstehe, habe ich das eigentlich ziemlich deutlich vor mir. Die Ausgabe funktioniert ja auch schon, nur eben wird die ID statt dem Namen ausgegeben und wie ich das ändere, war ja meine Frage.

    Die Schleife sieht ungefähr so aus:
    PHP-Code:
    while ($row mysql_fetch_assoc($result)) {
        
    $tablestring .= "<tr>";
        foreach (
    $row as $key => $value) {
            
    $tablestring .= "<td>$value&nbsp;</td>\n";
        }
        
    $tablestring .= "</tr>";    

    $tablestring ist dabei eine Variable in der ich den ganzen Code für die Tabelle zwischenspeichere und danach mit echo ausgebe.
    Vielleicht kannst du mir noch einen kleinen Hinweis geben, dass ich selbst draufkommen kann - finde ich ja prinzipiell auch besser als ein vorgeschriebenes Script vorgelegt zu bekommen, da lerne ich ja nichts. Leider bin ich aber ziemlich im Stress (nicht mehr viel Zeit um die ganze Website fertigzustellen) und hoffe jetzt eben hier auf einen kleinen Ratschlag ...

    mfg
    ende_

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Aber wie schaff ich das, dass ich die Daten irgendwie so bekomme, dass ich sie schön mit einer Schleife in die HTML-Tabelle packen kann?
    Indem Du Dir erstmal klar machst, wie die Daten dazu aussehen müssen. Erst denken, dann posten.

    Einen Kommentar schreiben:

Lädt...
X