Отдельный и групповой SQL-запрос

У меня есть немного сложный запрос MySQL для меня, и я не могу понять, как его написать, не потребляя тонны памяти. (я не против, если бы это было так)

У меня есть следующая таблица:

              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 |  

Мне нужен запрос, который извлекает только 1 элемент для каждого уникального идентификатора или IP-адреса. Итак:

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

Самые важные вещи:

  • Если несколько записей имеют одинаковый IP и один и тот же идентификатор -> они будут сгруппированы
  • Если несколько записей имеют одинаковый IP-адрес, но разные идентификаторы -> они не будут сгруппированы
  • Если несколько записей имеют одинаковый идентификатор, но разные IP-адреса -> они будут сгруппированы
  • Если несколько записей имеют одинаковый IP-адрес, но пустые поля ID -> они будут сгруппированы
  • Если несколько записей имеют одинаковый идентификатор, но пустые поля IP -> они будут сгруппированы

Это означает, что идентификатор должен иметь первый приоритет доверия, поскольку несколько пользователей могут использовать один и тот же IP-адрес.

Любой эффективный способ добиться этого?

Тонны благодарностей.


person CodeOverload    schedule 07.12.2010    source источник
comment
Какие ключи на этом столе? Я запутался, как у вас могут быть две разные записи, обе без идентификатора и с одним и тем же IP.   -  person eykanal    schedule 07.12.2010
comment
Я подозреваю, что ваша схема должна быть изменена. Возможно, ip должен быть в другой таблице, связанной первичным ключом.   -  person rook    schedule 07.12.2010


Ответы (1)


То, что вы хотите сделать, можно выполнить с помощью групповой_контакт.

Пример

ВЫБЕРИТЕ идентификатор, GROUP_CONCAT(ip) как ips FROM logs сгруппировать по идентификатору

изменить: забыл группу по

person Angelo Vargas    schedule 07.12.2010
comment
Ты самый удивительный человек на планете, ты спас мне задницу лет! - person CodeOverload; 12.12.2010