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

    Una query per incroci-affinità

    Salve a tutti,
    perdonate il titolo criptico ma non mi è venuto in mente niente di meglio.

    Ho bisogno di fare una query (probabilmente semplice) che per logica non mi viene.

    Mi spiego.

    I miei utenti hanno la possibilità di mettere tra i "preferiti" altri utenti della comunità ... ciò che vorrei fare è tirare fuori gli incroci per un determinato utente.

    Ovvero ... Io Bukowski ho messo tra i preferiti Giuseppe, Giovanni e Claudio.
    Solo Giovanni e Claudio, a loro volta, mi hanno messo tra i preferiti.
    Quindi nella mia pagina (di Bukowski) vorrei avere Giovanni e Claudio, e non Giuseppe.

    Come posso fare una query in cui appaiano solo coloro che si sono "preferiti" a vicenda?

    Ho una piccola tabella cosi fatta:

    ID | NICK1 | ID1 | NICK2 | ID2
    1 | Bukowski | 100 | Giovanni | 14
    2 | Giovanni | 14 | Bukowski | 100
    3 | Bukowski | 100 | Giuseppe | 40
    4 | Giuseppe | 66 | Luca | 45
    5 | Claudio | 23 | Bukowski | 100

    In pratica dovrei tirar fuori con una query tutti coloro che si sono preferiti a vicenda: ovvero Bukowski e Giovanni (riga 1 e 2) ... e gli altri no.

    Come posso fare?
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select tab1.*,
    if(tab1.nick1<tab2.nick1,tab1.nick1,tab2.nick1) as nome1,
    if(tab1.nick1<tab2.nick1,tab2.nick1,tab1.nick1) as nome2
    from tabella as tab1, tabella as tab2
    where tab1.id1 = tab2.id2
    and tab1.id2 = tab2.id1
    group by concat(nome1,nome2)
    in pratica gli if servono per ordinare le stringhe, nel senso che altrimenti ti ritroveresti il doppio dei risultati attesi (ogni coppia verrebbe individuata due volte con i due nick nelle colonne opposte.
    Usando gli if le coppie di nick possono essere ordinate e raggruppando su di esse elimini i doppioni.

  3. #3
    Ciao Nicola,
    innanzitutto grazie per la query, che a suo modo funziona perfettamente.
    Una cosa cosi non l'avrei saputa proprio fare.

    Credo però che si possa alleggerire molto di più, per il semplice fatto che dovrei concentrare tutto sul nick1, nel senso che quella sarà una variabile-valore già dichiarata.

    Per farti esempio ...

    Io dovrò trovare le sole corrispondenze ad un nick specifico (ovvero quello di cui si sta leggendo il profilo, facciamo esempio quello di Bukowski) che mi arriva attraverso un normale $_GET[id].

    Se la tua query cerca TUTTE le corrispondenze tra loro, in effetti ciò che sto cercando di fare è di trovare gli "amici" solo di Bukowski.

    Stando cosi le cose ho provato a giocare con la tua query (azz, da 40 minuti!!!) ma senza riuscirci tantissimo... anche perchè alcune cose mi confondono molto.

    :master: :master:

    Ti ringrazio per il prezioso aiuto.
    Perchè uso Maxthon? | Mi piace questa chat

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova così

    codice:
    select tab1.*,
    if(tab1.nick1<tab2.nick1,tab1.nick1,tab2.nick1) as nome1,
    if(tab1.nick1<tab2.nick1,tab2.nick1,tab1.nick1) as nome2
    from tabella as tab1, tabella as tab2
    where tab1.id1 = tab2.id2
    and tab1.id2 = tab2.id1
    and tab1.id1 = x
    group by nome1,nome2
    con x pari all'id dell'utente.

  5. #5
    Funziona ottimamente ed è anche molto leggera!

    Ti ringrazio

    Perchè uso Maxthon? | Mi piace questa chat

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mi fa piacere.

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.