Julian von Mendel: (PHP) Performantes finden doppelter/ähnlicher Einträge

Hallo,

ich habe eine MySQL-Datenbank mit 3000 Einträgen. Ich möchte jetzt mittels PHP alle 3000 Einträge finden, bei denen mind. eine der vorher bestimmten Spalten übereinstimmt, und diese dann nicht löschen, sondern eben nur alle Mehrfacheinträge ausgeben, um diese weiterverarbeiten zu können. Mein bisheriger Ansatz war, dass ich die Datensätze alle in ein Array lese, und dann mit PHP Mehrfachforkommnisse herauslösche (doofe Idee). Das lief mit meinen 5 Testeinträgen sehr gut, als ich dann aber die richtigen 3000 reingeladen hab, ging nichts mehr. Jetzt brauche ich eine Ersatzlösung. Ich habe http://www.plogmann.net/w/2/77/ gefunden, da wird erklärt, wie man eine temporäre Tabelle erstellen kann, "mittels eines SELECT Befehls mit GROUP-Anweisung in die temporäre Tabelle kopiert" und dann die alte Tabelle durch die temporäre ersetzt. Das Problem dabei ist, dass ich dann ja nicht weiß, was alles doppelt existiert hat, außer ich würde den Unterschied der beiden Tabellen rausfinden... was bestimmt wieder irgendwie langsam wäre.

Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?

Vielen Dank
Julian

--
"Real programmers can write assembly code in any language." - Larry Wall
  1. Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?

    Vielleicht hilft dir ja die Query weiter:

      
      SELECT  
        a,b,count(*)  
       FROM  
        tabelle  
       GROUP BY  
        a,b  
    
    
    1. Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?

      Vielleicht hilft dir ja die Query weiter:

      SELECT
          a,b,count(*)
         FROM
          tabelle
         GROUP BY
          a,b

      
      >   
        
      Oder das:  
        
      select a, count(a) from tabelle group by a having count(a) > 1  
        
      Gruß  
        
      Hans
      
    2. Hallo,

      SELECT
          a,b,count(*)
         FROM
          tabelle
         GROUP BY
          a,b

        
      Vielen Dank. Wenn ich jetzt für jedes Mehrfachergebnis nochmal die Daten anfordere, kann ich alle doppelten Einträge ausgeben. Das Beispiel von Hans wird bei mir leider mit einer Fehlermeldung beantwortet. Gibt es eine andere (funktionierende \*g\*) Möglichkeit nur die Ergebnisse mit count>1 anzuzeigen?  
        
      Schöne Grüße  
      Julian
      
      -- 
      "Real programmers can write assembly code in any language." - Larry Wall
      
      1. SELECT
            a,b,count(*)
           FROM
            tabelle
           GROUP BY
            a,b

        
        >   
        > Vielen Dank. Wenn ich jetzt für jedes Mehrfachergebnis nochmal die Daten anfordere, kann ich alle doppelten Einträge ausgeben. Das Beispiel von Hans wird bei mir leider mit einer Fehlermeldung beantwortet. Gibt es eine andere (funktionierende \*g\*) Möglichkeit nur die Ergebnisse mit count>1 anzuzeigen?  
          
        ~~~sql
          
          SELECT  
            a,b,count(*) AS cnt  
           FROM  
            tabelle  
           WHERE  
            cnt > 1  
           GROUP BY  
            a,b  
        
        
        1. Hallo, (traust dich nicht deinen Namen zu posten? ;)

          SELECT
              a,b,count(*) AS cnt
             FROM
              tabelle
             WHERE
              cnt > 1
             GROUP BY
              a,b

            
          super. Danke für die Hilfe.  
            
          Schöne Grüße  
          Julian
          
          -- 
          "Real programmers can write assembly code in any language." - Larry Wall
          
          1. Hallo, (traust dich nicht deinen Namen zu posten? ;)

            Mein Name ist Anonymous.

        2. yo,

          ich würde es mit Having angehen.

          SELECT a, b, count(*) AS cnt
          FROM tabelle
          GROUP BY a,b
          HAVING count(*) > 1

          Ilja