Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MySQL] Confronto fra dati nella stessa tabella

    Ciao a tutti, ho una tabella MySQL nella quale devo fare un confronto dati. Mi spiego meglio:
    ho un campo ip_utente e un campo nome_utente. Vorrei fare una ricerca che mi consenta di vedere solo i campi ip_utente associati a due o più nome_utente. È possibile una cosa del genere?

  2. #2
    select ip_utente, nome_utente, count(ip_utente) as tot
    from tabella
    group by ip_utente
    having tot > 1

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Allora, ho provato la query ma restituisce anche i casi in cui ip_utente è usato più volte con lo stesso nome_utente. Io vorrei che mi mostrasse solo le occorrenze di quando ip_utente è usato con nome_utente diversi.
    Esempio: l'IP 127.0.0.1 è stato usato dai seguenti nome_utente: tizio, caio. Se viene usato due volte dal nome_utente tizio non mi interessa. So che non è semplice e so bene che potrei cavarmela con quattro righe messe in croce in PHP, ma devo fare tutto da query MySQL.
    EDIT: cercando negli angoli più remoti della rete, ho trovato questo post che forse potrebbe fare al caso mio. Voi che ne dite? Avete altre soluzioni?
    Ultima modifica di vale_maio2; 16-08-2014 a 23:55 Motivo: trovato possibile soluzione da condividere

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ci sono tanti modi per arrivare allo stesso risultato.

    Prova questo (non testato)

    Codice PHP:
    select from tabella T1
    inner join 
    (select ip_utentecount(distinct nome_utente) as tot 
     from tabella group by ip_utente
     having tot 
    1T2 
    on T1
    .ip_utente T2.ip_utente 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Ci sono tanti modi per arrivare allo stesso risultato.

    Prova questo (non testato)

    Codice PHP:
    select from tabella T1
    inner join 
    (select ip_utentecount(distinct nome_utente) as tot 
     from tabella group by ip_utente
     having tot 
    1T2 
    on T1
    .ip_utente T2.ip_utente 
    Ho appena provato e ci stiamo avvicinando, ho solo fatto una leggera modifica di sintassi:

    codice:
    SELECT * FROM `tabella` AS T1
    inner join 
    (select ip_utente, count(distinct nome_utente) as tot 
     from `tabella` group by ip_utente
     having tot > 1) AS T2
    on T1.ip_utente = T2.ip_utente
    In questo modo mi fa vedere solo gli IP che sono stati utilizzati da più nomi utente. Problema: ho 12.150 risultati per la query, in quanto mi mostra anche righe diverse nelle quali nome_utente e ip_utente coincidono. È possibile rimuovere queste occorrenze? Ovvero vedere un solo risultato per ogni coppia ip_utente/nome_utente.
    Comunque grazie mille, è un enorme passo avanti

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Apparentemente non conosci bene l'sql.

    Codice PHP:
    SELECT distinct ip_utentenome_utente FROM `tabella` AS T1
    inner join 
    (select ip_utentecount(distinct nome_utente) as tot  
    from 
    `tabellagroup by ip_utente having tot 1) AS T2
    on T1
    .ip_utente T2.ip_utente 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Quote Originariamente inviata da vale_maio2 Visualizza il messaggio
    Allora, ho provato la query ma restituisce anche i casi in cui ip_utente è usato più volte con lo stesso nome_utente. Io vorrei che mi mostrasse solo le occorrenze di quando ip_utente è usato con nome_utente diversi.
    Esempio: l'IP 127.0.0.1 è stato usato dai seguenti nome_utente: tizio, caio. Se viene usato due volte dal nome_utente tizio non mi interessa. So che non è semplice e so bene che potrei cavarmela con quattro righe messe in croce in PHP, ma devo fare tutto da query MySQL.
    conta anche le occorrenze di nome_utente.

    select ip_utente, nome_utente, count(ip_utente) as tot1, count(nome_utente) as tot2
    from tabella
    group by ip_utente, nome_utente
    having tot1 > 1 and tot2 = 1

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Apparentemente non conosci bene l'sql.

    Codice PHP:
    SELECT distinct ip_utentenome_utente FROM `tabella` AS T1
    inner join 
    (select ip_utentecount(distinct nome_utente) as tot  
    from 
    `tabellagroup by ip_utente having tot 1) AS T2
    on T1
    .ip_utente T2.ip_utente 
    20120212-223344.jpg
    Si in effetti è da qualche anno che non mastico nessuna query database, per cui sono molto arrugginito. In sintesi, questa query è esattamente quello che cercavo: mi mostra solo gli IP usati da due o più utenti, anche se ho corretto la prima riga:
    codice:
    SELECT distinct T1.ip_utente, nome_utente FROM `tabella` AS T1
    . Senza questa modifica, mi dava errore 1052: Column 'id' in field list is ambiguous.
    Ho provato anche la query di piero.mac ma mi restituiva tutti gli IP utilizzati più di una volta, indistintamente da chi. Grazie ancora a tutti per l'aiuto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.