Ergebnisse nur bei bestimmter Anzahl an Zeilen!

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

  • Ergebnisse nur bei bestimmter Anzahl an Zeilen!

    Hallo!

    Hab mal eine Frage - ich habe zwei Tabellen in der MySQL aus denen die Daten mittels SELECT ausgelesen werden.

    Ist es nun möglich in dieser SELECT Abfrage zu definieren, dass nur Ergebnisse gefiltert werden, wenn in zweiten Tabelle mehr als 2 Zeilen für eine ID gefunden werden?

    Beispiel:

    TABELLE 1
    ==================
    ID Text
    ==================
    1 Text1
    2 Text 2


    TABELLE 2
    ==================
    ID TAB1ID Text
    ==================
    1 1 Tester 1
    2 1 Tester 2
    3 1 Tester 3
    4 2 Tester 1
    ...
    ..


    So ist in Tabelle 2 nur einmal die TAB1ID 2 vertreten, deswegen sollen nur Daten der TAB1ID = 1 ausgegeben werden

    Selbstverständlich sind in der Originaltabelle mehr Daten. Dies dient nur der Veranschaulichung.

    Abfrage "normal" ja möglich über
    ===========================
    SELECT T1.TEXT, T2.TEXT FROM TABELLE1.T1, TABELLE2.T2 WHERE T1.ID=T2.TAB1ID ORDER BY T1.ID


    Über ein PHP Script ist dies nicht möglich, da die Abfrage noch weiter verarbeitet wird.

    Muss direkt im SQL Befehl passieren!!

    Lg und vielen Dank!

  • #2
    Group by und having count() sind deine Freunde.

    Kommentar


    • #3
      hmmm danke... habe ich schon versucht - meine abfrage hat dann so ausgesehen - bekomme aber NULL resultate zurück:

      SELECT T1.TEXT, T2.TEXT FROM TABELLE1.T1, TABELLE2.T2 WHERE T1.ID=T2.TAB1ID GROUP BY T2.TAB1ID HAVING COUNT(T2.TAB1ID) > 2 ORDER BY T1.ID

      Kommentar


      • #4
        Original geschrieben von pgmnetworks
        hmmm danke... habe ich schon versucht - meine abfrage hat dann so ausgesehen - bekomme aber NULL resultate zurück:

        SELECT T1.TEXT, T2.TEXT FROM TABELLE1.T1, TABELLE2.T2 WHERE T1.ID=T2.TAB1ID GROUP BY T2.TAB1ID HAVING COUNT(T2.TAB1ID) > 2 ORDER BY T1.ID
        Und wenn du die Fehlermeldungen nicht unterdrücken würdest, gäbe das auch noch einen Fehler.
        Welchen Text aus t2 soll die DB von den dreien mit der tblid 1 auslesen? Und seit wann geht die FROM-Klausel einer Abfrage auf Attribute statt auf Tabellen?
        Hier eine Version, die funktionieren könnte:
        Code:
        SELECT 
        	t1.text
        FROM 
        	tabelle1 t1
        INNER JOIN
        	tabelle2 t2 ON  t1.id = t2.tab1id 
        GROUP BY 
        	t1.id 
        HAVING 
        	COUNT(t2.tab1id) > 2 
        ORDER BY 
        	t1.id
        Gruss
        H2O

        Kommentar


        • #5
          sorry, war nur ein fehler beim tippen hier... is natürlich nicht so in der originalabfrage!

          Kommentar


          • #6
            hmmm... hab das jetzt mal probiert - ist auch soweit in ordnung - kann es nur sein, dass dieses group by das selbe ungefähr wie distinct macht?!??! ich krieg nämlich jetzt jeden datensatz aus tabelle 2 nur noch einmal ausgegeben - statt wie im beispiel 3 mal?!?!

            Kommentar


            • #7
              Original geschrieben von pgmnetworks
              kann es nur sein, dass dieses group by das selbe ungefähr wie distinct macht?!??! ich krieg nämlich jetzt jeden datensatz aus tabelle 2 nur noch einmal ausgegeben - statt wie im beispiel 3 mal?!?!
              Nein, es wird jede Gruppe nur einmal ausgegeben. Deshalb kannst du ja auch den Text aus der zweiten Tabelle nicht sinnvoll ausgeben. Falls du das haben möchtest, müsstest du mit einem Subselect arbeiten:
              Code:
              SELECT 
              	t1.text,
              	t2.text
              FROM 
              	tabelle1 t1
              INNER JOIN
              	tabelle2 t2 ON  t1.id = t2.tab1id 
              WHERE
              	t1.id IN (
              		SELECT 
              			t3.id
              		FROM 
              			tabelle1 t3
              		INNER JOIN
              			tabelle2 t4 ON  t3.id = t4.tab1id 
              		GROUP BY 
              			t3.id
              		HAVING 
              			COUNT(t3.id) > 2 
              	)
              ORDER BY 
              	t1.id
              Gruss
              H2O

              Kommentar


              • #8
                ich danke dir!

                Kommentar

                Lädt...
                X