Ankündigung

Einklappen
Keine Ankündigung bisher.

SELECT über zwei Tables mit WHERE und AND

Einklappen

Neue Werbung 2019

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

  • SELECT über zwei Tables mit WHERE und AND

    Ich stehe nun inzwischen seit drei Tagen vor dem Problem das ich eine Datenbankabfrage machen möchte und ich die leider nicht hin bekomme. Ich habe mich bereits versucht in JOIN sowie UNION einzuarbeiten; aber evtl brauche ich Hilfe dabei oder ganz neue Ansätze.

    Ich habe einmal diese Tabelle:

    Code:
    pn_subs
    -> id
    -> name
    -> email
    -> format
    -> regdate
    -> edittime
    -> code
    -> status
    Und einmal diese Tabelle:

    Code:
    pn_cats
    -> id
    -> code
    -> cat
    Ich möchte nun folgendes machen: Aus der Tabelle "pn_subs" sollen alle Einträge genommen werden bei denen die Zeile "status" auf "1" steht, in der Tabelle "pn_cats" in der Zeile "code" meinetwegen auf "xyz" und in der Zeile "cat" zum Beispiel "15" steht.

    Code:
    SELECT * FROM pn_subs WHERE status = '1' UNION ALL SELECT * from pn_cats WHERE cat = '15' AND code = 'xyz'
    Diese Abfrage geht scheinbar nicht da ich diese Meldung erhalte:

    Code:
    The used SELECT statements have a different number of columns
    Über jede Idee oder Lösungsvorschlag bin ich dankbar.
    Wer fragt ist ein Narr - für 5 Minuten. Wer nicht fragt ist ein Narr - sein Leben lang.
    Die deutsche Sprache ist Freeware, jeder darf sie kostenlos nutzen. Sie ist jedoch nicht OpenSource und eigenmächtige Veränderungen sind nicht gestattet.

  • #2
    Das UNION geht nicht, da beide Tabellen unterschiedliche Spaltendefinitionen haben. EIn UNION muss aus der gleichen Anzahl Spalten (und gleichem Typ) bestehen.

    Mein Vorschlag:
    Code:
    SELECT * FROM pn_subs
    JOIN pn_cats ON pn_subs.id = pn_cats.id
    WHERE pn_subs.status = 1 AND pn_cats.code = 'xyz' AND pn_cats.cat = 15

    Kommentar


    • #3
      Vielen Dank für deine Antwort und deine Erläuterung zu UNION.

      Wenn ich deinen Vorschlag anwende bekomme ich zwar keinen Fehler, aber auch kein Ergebnis.
      Wer fragt ist ein Narr - für 5 Minuten. Wer nicht fragt ist ein Narr - sein Leben lang.
      Die deutsche Sprache ist Freeware, jeder darf sie kostenlos nutzen. Sie ist jedoch nicht OpenSource und eigenmächtige Veränderungen sind nicht gestattet.

      Kommentar


      • #4
        Haben die Tabellen denn eine Beziehung zueinander? Aus der Anforderung geht das so nicht hervor, die wirkt ein bisschen zusammenhangslos.
        http://sqlfiddle.com/ Beispieldaten helfen
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          Wenn ich deinen Vorschlag anwende bekomme ich zwar keinen Fehler, aber auch kein Ergebnis.
          Du kannst ja mal versuchen stückweise, d.h. Zeile für Zeile, auszugeben. Wenns klappt eine neue Zeile dazu. Wichtig ist ja erstmal dass du die Datensätze "zusammenwirfst", das WHERE kann später immer noch rein (bzw. können die Bedingungen auch ins ON rein.)

          Kommentar


          • #6
            Ich GLAUBE so langsam zu verstehen wie das mit dem JOIN und ON funktioniert.

            Code:
            SELECT * FROM pn_subs
            JOIN pn_cats ON pn_subs.code = pn_cats.code
            WHERE pn_subs.status = 1 AND pn_cats.cat = '2'
            Kann es sein das man in beiden Tabellen mindestens eine Spalte identisch haben muss? In diesem Beispiel ist es der "code" der in beiden Tabellen gleich ist. Über JOIN holt man die zweite Tabelle dazu und über ON legt man die Spalte fest die identisch ist. Ist das richtig?

            @VPh Meintest du das mit der Beziehung zueinander? - error_reporting habe ich immer an und Fehler werden selbstverständlich alle ausgegeben.

            @Spamversender So habe ich das gerade versucht. Bin gespannt ob ich das richtig geschlussfolgert habe oder es purer Zufall ist das es klappt ^^
            Wer fragt ist ein Narr - für 5 Minuten. Wer nicht fragt ist ein Narr - sein Leben lang.
            Die deutsche Sprache ist Freeware, jeder darf sie kostenlos nutzen. Sie ist jedoch nicht OpenSource und eigenmächtige Veränderungen sind nicht gestattet.

            Kommentar


            • #7
              Code:
              Kann es sein das man in beiden Tabellen mindestens eine Spalte identisch haben muss? In diesem Beispiel ist es der "code" der in beiden Tabellen gleich ist. Über JOIN holt man die zweite Tabelle dazu und über ON legt man die Spalte fest die identisch ist. Ist das richtig?
              Ja. Mit dem ON kann man novh beliebige Bedingungen definieren. Bei dir ist es so, dass die Bedingung, dass zwei Datensätze zusammengeworfen werden, die gleiche ID ist. mit AND und so kannst du noch weitere Bedingungen definieren (z.B. ID > 5).

              Kommentar

              Lädt...
              X