Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankeintrag nach UNION auslesen...

Einklappen

Neue Werbung 2019

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

  • Datenbankeintrag nach UNION auslesen...

    Hi,

    ich hab mich hier etwas durchs forum gelesen und bereits den gewünschten Befehl, nämlich "UNION" gefunden.

    Jetzt habe ich noch eine Frage zur Anwendung,

    Folgendes Beispiel:


    3 Tabellen
    + p_text
    + p_code
    + p_stuff

    alle 3 tabellen beinhalten
    + id (auto_increment für den datensatz - nicht wichtig)
    + p_id (jeder datensatz soll nach diesem kriterium zugewiesen werden)
    + position (eine nummerierung der elemente)
    + type (für eine spätere abfrage erforderlich)

    Soweit wäre die struktur der tabellen abgeschlossen (natürlich hat jede noch ihre eigenen spezifischen felder, daher auch mehrere verschiedene tabellen)

    Nun habe ich in jeder dieser Tabelle einen Datensatz mit der p_id "1", welche ich wie folgt aufrufen würde:

    PHP-Code:
    $sql "(SELECT * FROM p_text WHERE p_id = 1) UNION (SELECT * FROM p_code WHERE p_id = 1) UNION (SELECT ...) ORDER BY position ASC" 
    d.h. er ordnet die dinger nicht nach der eigentlichen datensatz-id, sondern nach der (einzigartigen) nr die im position feld drin ist.

    nun zur frage:

    Wie schaff ich es jetzt, dass er je nach typ (feld "type") eine für jeden datensatz eine datei (z.b.: "text_template.html") includet.

    Also wenn der Datensatz aus "p_text" die position "1" hat, soll als erstes "text_template.html" includet werden, "p_code" hätte position-nr "2" und deshalb soll an zweiter stelle "code_template.html" eingebaut werden.

    funktioniert das nur via einer schleife und if abfragen, oder denk ich hierbei viel zu kompliziert?

  • #2
    sry versehentlich das formular erneut abgeschickt :S

    Kommentar


    • #3
      Bist du sicher, dass du nicht JOIN brauchst?

      Code:
      SELECT
        xy
      FROM
        p_text pt JOIN p_code pc ON pt.p_id = pc.p_id
                  JOIN p_stuff ps ON pt.p_id = ps.p_id
      WHERE
        ...
      ORDER BY
        ..
      [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
      [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

      Kommentar


      • #4
        hm... bin mir dabei nicht ganz sicher, hab die variante mit UNION bis jetzt einfach von der verständlichkeit angenehmer gefunden, muss das erst ausprobieren.

        wobeis mir hierbei gar nicht so sehr um den mysql befehl geht, sondern eigentlich mehr um das was darauf folgt - nämlich das auslesen im bezug auf fetch_array/object, schleife oder nicht schleife, if abfragen etc

        Kommentar


        • #5
          Was soll denn überhaupt hinter text, code und stuff stehen? Vielleicht kann man dann eher helfen, wenn man das weiß.
          [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
          [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

          Kommentar


          • #6
            es geht um das erstellen einer seite aus mehreren elementen.

            d.h. ich hab z.b. "pages" als stammtabelle und darin einen datensatz mit dem primarykey "1", in der sonst nur mehr einstellungen gespeichert sind.


            die inhaltselemente befinden sich in anderen tabellen wie eben
            + p_text
            + p_code
            + p_stuff
            + ...

            jeder datensatz hat das feld feld "pageid" (inhalt im beispielfall "1") und position (nummerierung für geregelten seitenaufbau)

            Jetzt soll er alle Elemente, die sich in den oben genannten Tabellen mit der pageid "1" befinden aufrufen und nach "position" (1,2,3,...) sortieren


            das wäre zumindest der plan. ist es einigermaßen verständlich?

            Kommentar


            • #7
              Also wenn der Datensatz aus "p_text" die position "1" hat, soll als erstes "text_template.html" includet werden, "p_code" hätte position-nr "2" und deshalb soll an zweiter stelle "code_template.html" eingebaut werden.
              mach ne zusätzliche tabelle die jeder position einen dateinamen zuordnet...


              ich versteh auch gar nicht wieso du einmal eine ID und eine p_ID hast... wo steckt der sinn?
              außerdem habe ich die vermutung das du mit weniger tabellen auskommst als den dreien die du da hast
              ne deine frage war voll nicht verständlich formuliert...

              na wenn du pro query immer nur eine pageid aufrufst dann kannste doch einfach nach position sortieren? oder wo liegt das problem?
              "position ASC..."

              Kommentar


              • #8
                also ich hab 3 tabellen in der verschiedene datensätze drin sind und dann sollen sagen wir einer aus der ersten, 2 aus der zweiten und wieder einer aus der 3ten aufgerufen werden, aber nach "position" (eben eine fortlaufende zahlen, die sich durch die 3 tabellen zieht) sortiert... kann doch nicht einfach 3x SELECT hernehmen oder?
                als bsp:

                Headline = aus p_text mit position 1
                Content_1 = aus p_code mit position 2
                Image = aus p_stuff mit position 3
                und
                Content_2 = aus p_code mit position 4

                Kommentar


                • #9
                  öhm... wie dennis schon gesagt hat.. JOIN(also alle drei tabelle joinen ) und dann eben nach position sortieren

                  Kommentar


                  • #10
                    Zitat von apo Beitrag anzeigen
                    Jetzt soll er alle Elemente, die sich in den oben genannten Tabellen mit der pageid "1" befinden aufrufen und nach "position" (1,2,3,...) sortieren
                    Und wo ist jetzt dein Problem dabei ...?

                    Wie sich ORDER BY bei UNION auswirkt, und insb. wie man es mittels Klammersetzung beeinflusst, kann man im Hanbuch nachlesen:
                    http://dev.mysql.com/doc/refman/5.1/en/union.html
                    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                    Kommentar

                    Lädt...
                    X