CC: PHP & MySQL

Hi,

Ich habe eine PHP Seite, in die ich unter verschiedenen Themen verschiedene Inhalte in die Seite einlade.
Die Inhalte kommen aus einer MySQL DB und werden nach Gebiet sortiert. Es werden immer die drei ersten
Einträge auf der Seite gezigt, mit einem Link "alle anzeigen".

Das klappt auch alles, aber viele der DB-Inhalte passen zu mehreren Themen und werden daher auch in mehrere eingladen.
Jetzt möche ich aber, das ein Inhalt in z.B Themen (A,B,C,D,E,F) die Nummer 1 ist, ein anderer in (T,Z,U) und in F nur Nummer 2.
Da es sehr viele Themen und Einträge sind, finde ich keine Möglichkeit. Ausserdem muß ich die Rangfolge ändern können.

Kann mir einer nen Tip geben, welche Art von Key ich n der DB setzen könnte, um zu die Auflistung im Griff zu haben?

Danke ;-)

  1. Hi,

    Kann mir einer nen Tip geben, welche Art von Key ich n der DB setzen könnte, um zu die Auflistung im Griff zu haben?

    themen
    ------
    id
    thema

    inhalte
    -------
    id
    inhalt

    themen_inhalte
    --------------
    ref_themen
    ref_inhalte
    position

    Eine klassische n:m-Beziehung, der Du nur noch ein ORDER BY themen_inhalte.position hinzufügen mußt.

    Cheatah

    1. Hi,

      Kann mir einer nen Tip geben, welche Art von Key ich n der DB setzen könnte, um zu die Auflistung im Griff zu haben?

      themen

      id
      thema

      inhalte

      id
      inhalt

      themen_inhalte

      ref_themen
      ref_inhalte
      position

      Eine klassische n:m-Beziehung, der Du nur noch ein ORDER BY themen_inhalte.position hinzufügen mußt.

      Hallo Cheatah,
      Ganz so einfach wird es nicht sein. :)

      der Query müsste in etwa so aussehen um alle inhalte eines bestimmten themas in deren Reihenfolge zu bekommen:

      "SELECT DISTINCT i.inhalt,i.id FROM inhalte AS i, themen_inhalte AS t WHERE ( t.ref_tehmen='deineThemaid' AND t.ref_inhalte = i.id) ORDER by t.position ASC LIMIT 0,3"

      Angabe ohne Gewähr. :)
      Ludwig

      1. Hi,

        Ganz so einfach wird es nicht sein. :)

        warum nicht? Das Statement wird wie bei jeder n:m-Beziehung sein :-)

        "SELECT DISTINCT i.inhalt,i.id

        Hm, ich glaube nicht, daß sich das "DISTINCT" hier mit dem Rest verträgt...

        WHERE ( t.ref_tehmen='deineThemaid'

        Eine ID sollte idealerweise eine Zahl sein... also bitte keine Singlequotes ;-)

        Angabe ohne Gewähr. :)

        Im Prinzip aber richtig :-)

        Cheatah

        P.S.: Wenn Du glaubst, das Statement sei kompliziert, dann hast Du noch nicht viel mit SQL gemacht *g*

  2. Hi auch,

    Jetzt möche ich aber, das ein Inhalt in z.B Themen (A,B,C,D,E,F)
    die Nummer 1 ist, ein anderer in (T,Z,U) und in F nur Nummer 2.

    Wovon soll das abhängen?

    • Besitzen diese Einträge bereits irgendwelche Attribute, aus denen Du
        ihre gewünsche Reihenfolge algorithmisch bestimmen könntest (z. B.
        eine lexikographische Sortierung der Namen etc.), oder
    • muß diese Reihenfolge völlig "willkürlich" zusätzlich definiert werden?

    Im letzteren Falle zeigt Cheatahs Posting den Weg zum Ziel; es wäre
    allerdings lästig, weil wartungsintensiv, eine solche Tabelle pflegen
    zu müssen.

    Im ersteren Falle kommst Du mit einer geeigneten Sortier-Funktion aus,
    ohne dauerhaften Einsatz von manpower - deshalb solltest Du diese Lösung
    zuerst probieren (also Deine Sortierkriterien exakt spezifizieren).

    Viele Grüße
          Michael