ilch Forum » Allgemein » HTML, PHP, SQL,... » Hilfe bei MySql doppelte löschen

Geschlossen
  1. #1
    User Pic
    mic_pt Mitglied
    Registriert seit
    03.01.2008
    Beiträge
    319
    Beitragswertungen
    19 Beitragspunkte
    Hi,

    ich schlag mich nun schon seit monaten mit Contenspammer und scrapper ab ... mittlerweile nutze ich eine htaccess in der erstmal komplett China und Russland gesperrt sind.

    Dazu erweitere ich per Hand die Datei indem ich den iplogger mit laufen lasse und nach einer Reinigung die übrig gebliebenen ip´s via Spamsites prüfen lasse. Wird die adresse z.b. bei StopForumSpam erkannt - wandert sie in meine htaccess.

    Bitte - keine diskusionen ob es sinnvoll ist a) ip´s zu sperren oder b) länder auszuschliessen. Meine Seite (kleine Clanpage) hatte zeitweise über 2000 Hits am Tag (das bei knappen 20 Membern) und der Spam hatte zuvor die DB von 10 MB auf über 120 MB anwachsen lassen.

    Nun gut - hilfe brauch ich bei der "reinigungsprozedur" - als erste reinige ich die iploggertabelle von registrieten User mittels :

    DELETE FROM `ic1_iplogger` WHERE `userid` != 0


    dann werden die Bots rausgeschmissen :

    DELETE FROM `ic1_iplogger` WHERE `br` OR `os` like "%bot%" or "%google%"


    jetzt habe ich eine tabelle in der nur die Gäste stehen aber allerdings auch mehrfach - also jede menge doppleter Ip´s [sieht dann so aus:]

    ZitatZitat
    1656 -- 137.117.70.233 -- 0 --1363546609 -- saeeeo1urd4m10da76jus2jfj2 -- Windows 7 -- Chrome 22.0.1229.92 -- externer Link -- gbook-1= -- USER -- /tiwhq/index.php?gbook-1 -- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53...

    1655 -- 137.117.70.233 -- 0 -- 1363546607 -- saeeeo1urd4m10da76jus2jfj2 -- Windows 7 -- Chrome 22.0.1229.92 -- externer Link -- gbook= -- USER -- /tiwhq/index.php?gbook -- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53...



    jetzt möchte ich das SQl haben um die doppelten einträge zu löschen das ich also jeden tag durch ausführen einer php die db säubern lasse und dann nur noch die IP´s drin zu stehen habe die "verdächtig" sind und überprüft werden müssen.


    $sql = "SELECT COUNT(ip), ip FROM ic1_iplogger\n"
        . "GROUP BY ip\n"
        . "HAVING COUNT(ip) > 1";


    damit habe ich schon hinbekommen das er mir eine liste anzeigt wie oft die jeweiligen ips vorkommen .. weiter komme ich allerdings nicht traurig


    ist da evtl. ein sql pro unter euch der mir das schnell zusammenzaubern kann ?
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Was genau willst du, die Ips die doppelt vorkommen so löschen, dass sie nur noch einmal vorkommen oder wie? Wenn ja, ist dann egal welcher Eintrag erhalten bleibt und sollte mehr als nur die IP gleich sein?
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    mic_pt Mitglied
    Registriert seit
    03.01.2008
    Beiträge
    319
    Beitragswertungen
    19 Beitragspunkte
    Genau .. Zum schluss sollte ne liste rauskommen die nur einmal vorkommende ip's enthält. Egal welcher eintrag gelöscht wird.


    Thx
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    Auch für dich die Empfehlung

    externer Link

    Ist besser als was eigenes zu basteln.

    Zu deinem Problem

    http://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/


    Google hilft ;-)
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Saarlonz Hall Of Fame
    Registriert seit
    07.08.2008
    Beiträge
    3.003
    Beitragswertungen
    235 Beitragspunkte
    Sag mal Rock@wulf bekommst du Geld von denen für Werbung zunge
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    bot-trap ?

    Nö eigentlich wirklich nur ne gute Meinung von denen.
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Saarlonz Hall Of Fame
    Registriert seit
    07.08.2008
    Beiträge
    3.003
    Beitragswertungen
    235 Beitragspunkte
    War ja nur Spaß zwinker

    Sooo, jetzt aber Back to Topic
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    mic_pt Mitglied
    Registriert seit
    03.01.2008
    Beiträge
    319
    Beitragswertungen
    19 Beitragspunkte
    ich kenne die google ergebnisse - sitze da ja schon etwas dran - aber bin trotzdem nicht weitergekommen -

    bot-trap mag ich nicht, sind mir zuviele kritische stimmen die dagegen sprechen - ausserdem bin ich dann auf gedeih und verderb der DB von bots-trap ausgeliefert - und berichte zeigen das dort mitunter auch deutsche ips gesperrt worden sind und somit die eigenen user nicht auf die HP kommen.


    Ich möchte lieber meine htaccess führen die halt rus & china draussen halten und dann die übriggebliebenen per hand/script aussperren -

    da ich mich wirklich sehr schwer tu mit dieser MYSQL-Abfrage bitte ich euch mir nicht hilfe zur selbsthilfe zu posten sondern eine Lösung. Ich sitze da schon etwas länger dran und es will mir einfach nicht gelingen.
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Saarlonz Hall Of Fame
    Registriert seit
    07.08.2008
    Beiträge
    3.003
    Beitragswertungen
    235 Beitragspunkte
    DELETE FROM table1
    USING table1, table1 as vtable
    WHERE
    (table1.ID > vtable.ID)
    AND (table1.field_name=vtable.field_name)




    table1: Tabellenname

    field_name: Feld welches zum vergleichen genutzt werden soll
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    mic_pt Mitglied
    Registriert seit
    03.01.2008
    Beiträge
    319
    Beitragswertungen
    19 Beitragspunkte
    yeah .. mein Held

    es funktioniert - mensch da hab ich mir echt nen virtuellen arm dran gebrochen *Betonmischer auf den Schlauch geparkt hat*

    danke lächeln


    Zuletzt modifiziert von mic_pt am 18.03.2013 - 15:11:04
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Pion Hall Of Fame
    Registriert seit
    25.07.2007
    Beiträge
    870
    Beitragswertungen
    51 Beitragspunkte
    Wieso hinterst du nicht schon in der Tabelle beim Eintragen doppelte Ips, indem du der Spalte "ip" einen UNIQUE-Schlüssel gibts ?

    Ansonsten geht das nicht so einfach aus der gleichen Tabelle löschen wo du abfrägt in einem QUERY(zb durch sub-query).

    Am einfachsten du machst 2 Querys und reichst das ergebniss zb von den IDs in den 2ten Query mit ip IN('.implode(',', $xyz).') rein.
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    mic_pt Mitglied
    Registriert seit
    03.01.2008
    Beiträge
    319
    Beitragswertungen
    19 Beitragspunkte
    als Basis dient mir der iplogger der hier auch in den downloads angeboten wird. Der code ist schon ziemlich kompliziert (für mich) und da wollte ich dann nicht selber ran und hab mich entschlossen meine lösung drum zu basteln.
    Da der Ip-logger jeden zugriff auch mit ziel angibt - sind halt ip´s nicht unique.


    jetzt siehts bei mir so aus:

    auf knopfdruck (später auch automatisiert) wird die tabelle gereinigt und die mehrfach vorkommenden ip´s auf eine reduziert ..

    im nächsten schritt werden dann immer 15 ip´s bei stopforumspam via api geprüft und die antwort-xml geparst - alles was Stopforumspam kennt wird dann via php in die htaccess gepackt.

    für mich ist das mit der htaccess am einfachsten - ich schaue aber noch paralell ob es eine ebenfalls sichere methode per php gibt leute direkt von der domain zu bannen.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten