phpmyadmin - Strukturbaum

  • hallo zusammen :)

    baue mir gerade ein kleines news script zusammen. habe jedoch ein paar probleme bei der struktur der datenbank.

    das ganze soll wie folgt aussehen:

    Möchte die News in einzelne Kategorien aufteilen z.B. Sport, Musik usw... hier einzelne Tabellen anlegen, kein Problem...

    In der Tabelle (z.B. Sport) sind dann die einzelnen News aufgelistet (ID, Name, Text usw)

    Jedoch möchte ich, dass jeder Newsartikel eine vielzahl an Links hat. Artikel 1 hat 24 Links, Artikel 2 besitzt lediglich 2 Links... Wie kann ich das in der Datenbank lösen, dass ich für einen Artikel so viele Links eintragen kann wie ich möchte, ohne dass ich hunderte von Felder anlegen muss? Es soll sich sozugsagen selbst erweitern, wie bei den IDs.

    Etwas kompliziert geschrieben aber keine Ahnung, wie ich das am Besten vermitteln soll...

    Würde mich über Antworten freuen

    lg flicker

  • Stichwort: Datenbank-Normalisierung.
    Tabelle news:
    id
    text
    datum

    Tabelle links
    id
    url
    linktext
    news_id => die Id des news-eintrags

    Somit ist jeder Link genau einem News-eintrag zugeordnet und du kannst sie über einen einfachen join mit aus der DB holen.


  • ich verstehe das prinzip. wie verbinde ich jedoch zu einem newsartikel die verschiedenen angelegten links? soll wie folgt aussehen:

    Newsartikel 1

    • Link 1
    • Link 2
    • Link 3


    Newsartikel 2

    • Link 1
    • Link 2
    • Link 3

    Kannst du mir das vllt ein wenig genauer erklären? das wäre super!

    LG, flicker

  • Du hast jetzt mal 2 News-einträge, mit den Id's 1 und 2.
    Link 1 hat 7 Links mit den Id's 1-7, Link 2 hat 4 Links mit den Id's 8-11.
    Jeder Link ist eine Zeile in der Link Tabelle und hat das Feld 'news_id'. In diesem Feld steht dann die Id des News-eintrags, zu dem der Link gehört.
    Bei den Links 1-7 steht in diesem Feld also eine 1, bei den Links 4-11 die 2.
    Auslesen kannst du das dann per sql so:

    Code
    Select id, dies, das, jenes FROM news
    JOIN links ON news_id = news.id

    Und noch was, hab grade deinen ersten Beitrag genauer gelesen. Das ganze wird unmöglich, wenn du für jede Newskategorie eine eigene Tabelle hast.
    Regele die Zuweisung zu den einzelnen Kategorien genauso wie gerade beschrieben.


    Einmal editiert, zuletzt von jojo87 (18. Oktober 2010 um 22:47)

  • Leider gibt er mir jedesmal ALLE Links aus... Ist mein Code falsch oder mus sich noch etwas berücksichtigen? Bin noch nicht ganz fit mit der Materie...

    PHP
    $abfrage = "SELECT * FROM news JOIN links ON news.id = links.news_id";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
        {
        echo "<h1>$row->name</h1>";
        echo "<h1>$row->url</h1>";
        }
  • du fragst ja gerade auch alle news einträge ab, somit bekommst du auch alle link-einträge.
    Da du mehrere Links pro news-eintrag hast, bekommst mehrere Ergebnisse, welche denselben Newseintrag darstellen, für jeden Link einen. Da musst du im Code och gegenprüfen.
    Lass dir mal über ein var_dump() das $row ausgeben, dann siehst du, was ich meine.


  • Wenn du die id des news-eintrags schon hast:

    Code
    select dies,das,jenes from links where news_id = id des news-eintrags


    Mit deinem obigen Code musst du die Ergebnisse der Abfrage noch aufbereiten: