2010-12-07 18 views
0

Ich habe ein bisschen komplexe MySQL-Abfrage für mich und ich kann nicht herausfinden, wie man es schreibt, ohne tonnenweise Speicher zu essen. (Ich habe nichts dagegen nicht wirklich, wenn es würde)Distinct & Group SQL Query

Ich habe die folgende Tabelle:

   TABLE: users(id,ip) 
       ------------------------------------ 
       4BF1510 | 40.145.10.99 <-- SAME IP (A) 
SAME ID --> 510SD55 | 65.12.105.42 
SAME ID --> 510SD55 | 45.184.15.10 
       201505V | 40.145.10.99 <-- SAME IP (A) 
       984AZ6C | 72.98.45.76 
         | 10.15.78.10 <-- SAME IP (B) 
         | 10.15.78.10 <-- SAME IP (B) 
SAME ID --> B1D56SX | 
SAME ID --> B1D56SX | 

Ich mag eine Abfrage, die nur fetchs 1 Artikel pro einem eindeutigen ID oder ip, also:

4BF1510 | 40.145.10.99 
510SD55 | 65.12.105.42 
984AZ6C | 72.98.45.76 
     | 10.15.78.10 
B1D56SX | 

die wichtigsten Dinge:

  • Wenn mehrere Einträge die gleiche IP und gleiche ID haben -> werden sie
  • 01 gruppiert werden
  • Wenn mehrere Einträge haben die gleiche IP, aber unterschiedlichen IDs -> sie werden nicht
  • Wenn mehrere Einträge haben die gleiche ID, aber unterschiedliche IP-Adressen gruppiert werden -> sie werden
  • Wenn mehrere Einträge die gleiche IP gruppiert werden aber leer ID-Felder -> werden sie
  • Wenn mehrere Einträge die gleiche ID aber leer IP Felder gruppiert werden -> sie werden

gruppiert werden, was bedeutet, dass die ID sollte die erste Priorität des Vertrauens, weil mehrere u sers können die gleiche IP verwenden.

Jeder effektive Weg, um das zu erreichen?

Tonnen des Dankes.

+0

Was die Schlüssel zu dieser Tabelle sind ? Ich bin verwirrt, wie Sie zwei verschiedene Einträge haben können, beide ohne ID und die gleiche IP. – eykanal

+0

Es gibt keine Schlüssel @eykanal – Ryan

+0

Ich vermute, dass Ihr Schema geändert werden muss. Vielleicht sollte IP in einer anderen Tabelle sein, die durch einen Primärschlüssel verbunden ist. – rook

Antwort

1

Was Sie tun möchten, kann mit group_contact durchgeführt werden.

Beispiel

SELECT id, GROUP_CONCAT (ip) als IPs aus Protokolle Gruppe von id

edit: vergessen Gruppe von

+0

Du bist die erstaunlichste Person auf dem Planeten, du hast mir den Arsch gerettet! – Ryan