Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten aus zweier Tabellen joinen, sortieren, ausgeben

Einklappen

Neue Werbung 2019

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

  • Daten aus zweier Tabellen joinen, sortieren, ausgeben

    Hallo zusammen

    Ich möchte im Menü meiner Website sowohl dynamische Seiten als auch Dokumente einbinden. Klickt man auf eine Seite, wird diese angezeigt, klickt man auf ein Dokument, öffnet sich das PDF.
    Innerhalb des Menüs verwende ich verschiedene Menüpunkte, sogenannte Kategorien. Zum Beispiel Menüpunkt (Kategorie) 'Verein' beinhaltet die Seiten
    - Agenda
    - News
    - Vorstand
    - Kontakt
    - Links
    und das Dokument 'Abstimmungsergebnisse'.

    Die Seiten liegen in der Table pages, die Dokumente in der Table documents. Ich hole die Seiten und Dokumente mittels UNION ALL aus der DB. Beide Tabes haben die Colums 'id', 'catID', 'title', 'usort'. 'usort' bestimmt die Anordnung innerhalb des Menüpunktes/Kategorie 'Verein'. Das ist auch der Grund, warum ich UNION verwende, damit ich Docs und Pages innerhalb einer Kategorie sortieren kann. Die Kategorie 'Verein' hat die ID 35. Also mache ich ein UNION, so dass ich alle Seiten/Dokumente assoziiert mit ID 35 bekomme.


    [PHPWIKI]SELECT id AS pageid,title AS page title,usort FROM becustompages_pages WHERE catID='35'

    UNION ALL

    SELECT id AS docid,title AS ductile,sort FROM bedocuments_documents WHERE catID='35'

    ORDER BY usort ASC[/PHPWIKI]

    Das klappt soweit so gut. Zumindest erhalte ich folgende Ausgabe, was dem entspricht, was ich erhalten möchte:

    [PHPWIKI]
    pageid | pagetitle | usort
    117 | News | 1
    118 | Agenda | 2
    116 | Vorstand | 3
    60 | Abstimmung Statuten 2011 - Abstimmungsergebnis | 4
    125 | Links | 5
    51 | Kontakt | 6
    [/PHPWIKI]

    Nun habe ich aber das Problem, dass ich für die PHP Ausgabe unterscheiden möchte, ist es ein Dok oder eine Seite. Entsprechend möchte ich einen anderen Link verwenden (pages.php?id=) oder (documents.php?id=). Wie kann ich mit einem UNION dennoch ausfindig machen, um was für einen Eintrag es sich handelt? Wie im Select ersichtlich, versuchte ich, die id Columns neu zu benennen, um somit erkennen zu können, ist es eine pageid oder docid. Doch das klappt leider nicht… Es werden mir alle Einträge als pageid ausgegeben…

    Kan mir jemand einen Tipp geben, wie ich Daten aus zwei Tabellen auslesen und sortieren kann, so dass ich danach auch noch ausfindig machen kann, aus welcher Table die Daten entstammen?

    Vielen Dank!
    Gruss, Roland


  • #2
    Ich glaube, nun habe ich mir gleich selbst die Lösung gegeben. Kaum fertig geschrieben, hatte ich den Einfall, die Table zu benennen, damit ich die Einträge darüber in PHP verarbeiten kann:

    [PHPWIKI]
    SELECT

    id AS id,
    title AS title,
    'pages' AS TABLE_NAME

    FROM becustompages_pages
    WHERE catID='35'

    UNION ALL

    SELECT

    id AS id,
    title AS title,
    'documents' AS TABLE_NAME

    FROM bedocuments_documents
    WHERE catID='35'

    ORDER BY title

    [/PHPWIKI]



    [PHPWIKI]
    id | title | TABLE_NAME
    60 | Abstimmung Statuten 2011 - Abstimmungsergebnis | documents
    118 | Agenda | pages
    125 | Links | pages
    117 | News | pages
    116 | Vorstand | pages
    51 | ZPV Luzern kontaktieren | pages
    [/PHPWIKI]

    Kommentar


    • #3
      Du könntest noch eine Spalte an die Ergebnisse anfügen.

      PHP-Code:
      SELECT id AS pageid,title AS page title,usort'Page' AS Art FROM becustompages_pages WHERE catID='35'
      UNION ALL
      SELECT id 
      AS docid,title AS ductile,sort'Dokument' AS Art FROM bedocuments_documents WHERE catID='35'
      ORDER BY usort ASC 
      Können die Spaltennamen im Union wirklich unterschiedlich sein? docid und pageid.. ich prüfe!
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        Zitat von VPh Beitrag anzeigen
        Du könntest noch eine Spalte an die Ergebnisse anfügen.

        PHP-Code:
        SELECT id AS pageid,title AS page title,usort'Page' AS Art FROM becustompages_pages WHERE catID='35'
        UNION ALL
        SELECT id 
        AS docid,title AS ductile,sort'Dokument' AS Art FROM bedocuments_documents WHERE catID='35'
        ORDER BY usort ASC 
        Können die Spaltennamen im Union wirklich unterschiedlich sein? docid und pageid.. ich prüfe!
        Danke VPh, das mache ich so

        Kommentar

        Lädt...
        X