Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL: Tabellenausgabe, User mit gleichen Einträgen (https://www.delphipraxis.net/121125-sql-tabellenausgabe-user-mit-gleichen-eintraegen.html)

Angel4585 22. Sep 2008 20:48

Datenbank: MySQL • Version: 5 • Zugriff über: PHP

SQL: Tabellenausgabe, User mit gleichen Einträgen
 
Hallo,

ich habe folgende Tabellenstruktur:

Multitabelle(User,ip1,ip2,ip3,ip4,lastactive)

ip1-ip4 sind die 4 bestandteile einer ip, also bei 127.0.0.1 wäre:

ip1 = 127
ip2 = 0
ip3 = 0
ip4 = 1

jetz sage ich,
wenn bei zwei unterschiedlichen Usern ip1-ip4 identisch sind, kommen die von der gleichen IP, Multiwahrscheinlichkeit ist also 100%.
wenn bei zwei unterschiedlichen Usern ip1-ip3 identisch sind, ist die Multiwahrscheinlichkeit 75%.
wenn bei zwei unterschiedlichen Usern ip1-ip2 identisch sind, ist die Multiwahrscheinlichkeit 50%.
wenn bei zwei unterschiedlichen Usern ip1 identisch ist, ist die Multiwahrscheinlichkeit 25%.

Jetzt möchte ich eine Liste die mir zB alle User ausgibt die eine Wahrscheinlichkeit von 50% oder höher haben.
Wie mache ich das? Ich hab kp wie ich das in ne SQL-Abfrage packe(vllt steh ich aber au grad etwas aufm Schlauch )

Wär cool wenn ihr mir en Ansatz geben könntet.

:angel:

rollstuhlfahrer 22. Sep 2008 21:19

Re: SQL: Tabellenausgabe, User mit gleichen Einträgen
 
HI,

die SQL-Abfrage müsste etwa so aussehen:

SQL-Code:
SELECT * FROM Tabelle WHERE (ip1 in (SELECT ip1 FROM Tabelle AS Tmp1)) AND (ip2 in (SELECT ip2 FROM Tabelle AS Tmp2));
Von der Sruktur her sollte es richtig sein, ist aber nicht getestet. MYSQL ließt damit die Tabelle 3x aus. 1x für ip1, dann für ip2 und dann für den Rest der Abfrage. Ob die Kombination jetzt gelungen ist, weiß ich nicht.

Bernhard

omata 23. Sep 2008 00:26

Re: SQL: Tabellenausgabe, User mit gleichen Einträgen
 
SQL-Code:
SELECT * 
FROM multitabelle a
INNER JOIN multitabelle b
  ON a.user < b.user
WHERE CASE
        WHEN    a.ip1 = b.ip1 
             AND a.ip2 = b.ip2 
             AND a.ip3 = b.ip3 
             AND a.ip4 = b.ip4 THEN 100
        WHEN    a.ip1 = b.ip1 
             AND a.ip2 = b.ip2 
             AND a.ip3 = b.ip3 THEN 75
        WHEN    a.ip1 = b.ip1 
             AND a.ip2 = b.ip2 THEN 50
        WHEN    a.ip1 = b.ip1 THEN 25
        ELSE 0
      END >= 50
Und mit Ausgabe...
SQL-Code:
SELECT *
FROM (SELECT CASE
               WHEN    a.ip1 = b.ip1
                    AND a.ip2 = b.ip2
                    AND a.ip3 = b.ip3
                    AND a.ip4 = b.ip4 THEN 100
               WHEN    a.ip1 = b.ip1
                    AND a.ip2 = b.ip2
                    AND a.ip3 = b.ip3 THEN 75
               WHEN    a.ip1 = b.ip1
                    AND a.ip2 = b.ip2 THEN 50
               WHEN    a.ip1 = b.ip1 THEN 25
               ELSE 0
             END mw,
             a.user userA, a.ip1 a_ip1, a.ip2 a_ip2, a.ip3 a_ip3, a.ip4 a_ip4,
             b.user userB, b.ip1 b_ip1, b.ip2 b_ip2, b.ip3 b_ip3, b.ip4 b_ip4
       FROM multitabelle a
       INNER JOIN multitabelle b
         ON a.user < b.user) x
WHERE mw >= 50

Angel4585 23. Sep 2008 05:41

Re: SQL: Tabellenausgabe, User mit gleichen Einträgen
 
räääspäckt, funzt tatsächlich :thumb:
Großes Danke an omata :dp:

grenzgaenger 23. Sep 2008 06:47

Re: SQL: Tabellenausgabe, User mit gleichen Einträgen
 
Zitat:

Zitat von Angel4585
jetz sage ich,
wenn bei zwei unterschiedlichen Usern ip1-ip4 identisch sind, kommen die von der gleichen IP, Multiwahrscheinlichkeit ist also 100%.

du weisst, dass deine annahme logisch Falsch ist :roll:

Angel4585 23. Sep 2008 07:01

Re: SQL: Tabellenausgabe, User mit gleichen Einträgen
 
Naja es gibt die Möglichkeit das es tatsächlich zwei unterschiedliche sind die jedoch hinter dem selben Proxy sitzen.
In diesem Fall werden diejenigen benachrichtigt und müssen erklären warum sie die gleiche IP haben.


Oder das jemand ne ip bekommen hat die schonmal wer hatte, klar.
Deswegen gibts das Flag lastactive.
Wenn es der gleiche User ist der die IP wieder hat wird einfach das lastactive flag erneuert.
Wenn es ein anderer ist schau ich wie alt die vorherige ip ist.

Aber es ist sehr unwahrscheinlich das zwei(von aktuell 29) die mein Browsergame spielen die gleiche IP haben, ausser es handelt sich um einen Multi oder eine Familie(eine Familie ist tatsächlich dabei aber die kenne ich)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz