2 Tabellen verknüpfen (kein normales JOIN)

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

  • 2 Tabellen verknüpfen (kein normales JOIN)

    So, ich habe zwar gesucht, dummerweise weiß ich nicht genau, nach was ich eigentlich suchen will, und 81 Seiten durchlesen war mir dann doch etwas zu viel Aufwand.
    Angenommen, man hat 2 Tabellen, die aber die gleichen Spalten haben. Und nun möchte man die letzten 10 Einträge aus beiden (oder mehr) Tabellen auslesen.

    Beispiel:
    [FONT=courier new]
    news_1
    +-------------------------+
    | ID | headline | content |
    +-------------------------+
    [COLOR=red]| 01 | news #1 | blablaah |
    | 02 | news #2 | foobarfo |[/COLOR]
    +-------------------------+

    news_2
    +-------------------------+
    | ID | headline | content |
    +-------------------------+
    [COLOR=darkblue]| 01 | news #3 | texttext |
    | 02 | news #4 | barf00ba |[/COLOR]
    +-------------------------+
    [/FONT]

    Und rauskommen soll dabei folgendes:
    [FONT=courier new]
    +-------------------------+
    | ID | headline | content |
    +-------------------------+
    [COLOR=red]| 01 | news #1 | blablaah |
    | 02 | news #2 | foobarfo |[/COLOR]
    [COLOR=darkblue]| 01 | news #3 | texttext |
    | 02 | news #4 | barf00ba |[/COLOR]
    +-------------------------+
    [/FONT]

    Ist das möglich (ohne eine temporäre Tabelle zu erstellen)?
    Falls ja, gebt mir bitte 'nen Tip (group by und distinct kann ich dazu wohl nicht gebrauchen).

  • #2
    .. man hat 2 Tabellen, die aber die gleichen Spalten haben.
    warum hast du zwei identische tabellen?

    Kommentar


    • #3
      Ich wusste, dass diese Frage kommt.
      Und zwar kommen diese Datenbanken aus einem multiportalfähigen CMS.
      Sprich mehrere Webseiten (die irgendwie zusammen gehören) werden über ein System gesteuert. Und pro Portal gibt es da eben Tabellen.
      Portal1:
      prefix_1_content
      prefix_1_news

      Portal2:
      prefix_2_content
      prefix_2_news

      Nun würde ich da aber gerne etwas einbauen, dass mir die letzten 5 News aus allen Portalen anzeigt. Nur so als Spielerei.

      Man könnte jetzt natürlich auch einfach nur EINE news und EINE content tabelle machen, die mit ner Spalte "portal" ausstatten, aber bei ein paar Tausend Datensätzen kann die Aufteilung sicher nicht schaden.

      Kommentar


      • #4
        quick'n'dirty:
        Frage jede News Tabelle ab, merge die entstehenden Arrays und werte das ganze dann mit PHP aus

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Original geschrieben von DarkRoot
          Und pro Portal gibt es da eben Tabellen.
          Entweder trennt man das ganze wirklich konsequent ...
          Nun würde ich da aber gerne etwas einbauen, dass mir die letzten 5 News aus allen Portalen anzeigt. Nur so als Spielerei.
          ... oder man lässt es.

          So aber so eine Vermischung, bzw. Unentschlossenheit - ja, ich möchte alles auf Teufel komm raus strikt trennen, aber dann möchte ich die Daten doch wieder gemeinsam zur Verfügung haben - ist in meinen Augen wieder mal Nonsense.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ich wusste, dass diese Frage kommt.
            die frage muss ja kommen.

            Man könnte jetzt natürlich auch einfach nur EINE news und EINE content tabelle machen, die mit ner Spalte "portal" ausstatten, aber bei ein paar Tausend Datensätzen kann die Aufteilung sicher nicht schaden.
            man könnte nicht nur, man macht es auch so.
            von wegen ein paar tausend datensätze. und jetzt?
            das ist eine datenbank, die ist dafür gemacht ein paar tausend datensätze zu speichern.

            zu deinem problem, wie schon vorgeschlagen:
            zwei selects, fertig.. falls nicht zwei sondern n mal geschehen soll mach halt ne for schleife.

            Kommentar


            • #7
              UNION ist dein Freund

              Kommentar


              • #8
                Code:
                SELECT id, headline, content 
                FROM tabelle_1 
                WHERE id > (SELECT MAX(id) - 5 FROM tabelle_1)
                UNION
                SELECT id, headline, content 
                FROM tabelle_2 
                WHERE id > (SELECT MAX(id) - 5 FROM tabelle_2)

                funktioniert zwar nur wenn keine lücken in den ids sind aber für mehr hab ich jetz mal keine zeit
                signed oder unsigned... das ist hier die Frage

                Kommentar


                • #9
                  Du könntest ggf. probieren mit MERGE was zu reißen (merge-Tabelle)

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Vielen Dank für die letzten 3 Beiträge.
                    Werd's gleich mal ausprobieren.

                    Kommentar


                    • #11
                      Original geschrieben von DarkRoot
                      Vielen Dank für die letzten 3 Beiträge.
                      Werd's gleich mal ausprobieren.
                      Für die Merge-Lösung noch ein Zusatz:
                      http://www.mysqlperformanceblog.com/...tables-gotcha/

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar

                      Lädt...
                      X