Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Query amici in comune

  1. #1

    Query amici in comune

    Salve a tutti,
    nel mio sito dispongo di una classica FriendList a disposizione degli iscritti,
    dove nel database MySql esiste una tabella chiamata AMICIZIE così strutturata:

    AMICIZIE |
    |ID| |mioLogin| |amico||valido|

    Il campo ID è auto incrementante.

    Sto tentando da un pò di create una query in grado di selezionare gli amici in comune tra i vari utenti.
    In pratica dovrebbe "pescare" tutti gli stessi amici (campo "amico") in relazione con quelli che io ho nelle mia lista. Questo permetterebbe ad ogni utente in possesso di una lista amicizie, di conoscere gli amici degli amici, tipo quella che si trova nel famoso FaceBook.


    Purtroppo mi risulta un pò complessa la cosa, chiedo gentilmente se qualcuno può scrivermi una bozza di query da dove prendere spunto.

    Grazie
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

  2. #2
    scusami
    ma credo di non aver capito....
    la struttura della tua tabella AMICIZIE

    ID è un auto incrementante ...OK

    mioLogin
    amico
    valido

    cosa rappresentano????

    Max
    Ci sono solo 10 tipi di persone al mondo, chi conosce il binario e chi no.

    Disapprovo quello che dici, ma difenderò fino alla morte il tuo diritto a dirlo.

    Tanta bella giovinezza che si fugge tuttavia, chi vuol essere lieto sia, del doman non v'e' certezza.

  3. #3
    Ciao, li descrivo.


    ID
    mioLogin
    amico
    valido

    campo mioLogin = il nome della sessione utente nick usato in fase di registrazione communty
    amico = Il nome dellamico inserito nella lista amici personale
    valido = campo TyniInt numerico 0/1 in base all'accettazione dell'amicizia.


    Se il mio Nick è Cristiano questo sarà presente nel campo mioLogin,
    i miei amici sono memorizzati nel campo amico, nella tabella ci sono tante riche quanti sono
    i miei amici, ogni riga avrà mioLogin con Cristano come indice, e il campo amico con tutti i nomi diversi di amici.


    Grazie
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

  4. #4
    Scusate spiego meglio cosa dovrebbe fare la mia query:

    1) contare e recuperare i nomi degli amici presenti nella mia FriendList, fino qui ok.

    Codice PHP:
    SELECT IDmiologinamicodatavalido FROM amicizie" & _
    WHERE miologin mionome AND valido=1" & _
    ORDER BY data DESC LIMIT 5
    2) Ora vorrei conoscere i nomi delle persone che hanno 1 o più amici in comune con me, cioè recuperare il campo miologin delle altre FriendList che hanno gli stessi miei amici.

    Basterebbe confrontare le mie amicizie con quelle presenti nelle altre FriendList ed estrare il relativo proprietario, ma non riesco con una sola query

    Ribadisco l'esempio di FaceBook, quando si clicca su un profilo, vengono indicate le amicizie
    di quel profilo, considerando le proprie già acquisite (Amici in comune).

    Sembra complicato ma dovrebbe essere fattibile
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Premesso che non utilizzo facebook e non ne conosco il funzionamento vedi se ho centrato il problema

    codice:
    select miologin,amico from amicizie
    where miologin <> 'Cristiano' and amico in
    (
    select amico from amicizie
    where miologin = 'Cristiano')

  6. #6
    Grazie per la risposta, provando funziona, ma purtroppo impiega circa un minuto per estrarre i risultati.
    La query l'ho lanciata in locale con MySQL, mettendo anche in coda un ORDER BY data DESC LIMIT 5 per velocizzare però ci pensa sempre un minutino buono.
    Peccato davvero perchè il risultato è giusto.

    Se hai soluzioni le provo. Grazie
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova a creare una tabella utenti

    id nome_utente
    1 cristiano
    2 pippo
    3 pluto

    e a usare i rispettivi id nella tabella amicizie. Su dei valori numerici la query sarà più veloce che sui letterali.

    edit. Dimmi se questa query è più veloce

    codice:
    select a2.* from amicizie as a1
    left join amicizie as a2
    on a1.amico = a2.amico
    where a1.miologin = 'cristiano'
    and a1.miologin <> a2.miologin

  8. #8
    Avendo già un indice ID autoincrementante in tabella ho potuto provare subito,
    ora è davvero immediata senza dubbio e senza LIMIT.

    Però non ho chiarezza nei risultati,
    cioè usando nel ciclo While Not il record miologin
    ottengo lo stesso nome (cristiano) tante volte.

    Mentre se uso nel ciclo il campo amico ottengo gli stessi nomi che ho nella lista amici di cristiano.

    Questo perchè all'inizio, il progetto era di estrarre gli intestatari di ogni friend list.

    Cosa ne dici?
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Perdonami ma non ho capito.
    Come hai risolto, con l'ultima query che ti ho postato?

  10. #10
    Si esatto ho risolto il problema di velocità di eseguzione,

    però c'è questo problema ora...


    Response.Write miologin

    il risultato è

    cristiano
    cristiano
    cristiano
    cristiano
    cristiano
    cristiano
    Etc....

    mentre se uso

    Response.Write amico


    Ottengo le stesse persone che sono presenti nella mio lista amici,
    cioè quella di Cristiano.
    http://www.romagnamania.com
    Una community tutta gratis per chi ama la Romagna.

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.