Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    ..la seconda query mi estrae anche l'username! mi fa questo:

    id_amicizia from_friend to_friend request_date request_status friend_blocker id_friend_blocker nome Crescente
    2 311 63 2009-12-15 20:17:07 1 1 NULL patticoco
    1 55 311 2009-12-15 19:50:14 1 1 NULL richi

  2. #12
    L'ho messa nel codice php la seconda query ed è perfetta!
    Ehy sei fortissimo! Grazie! Posso però scocciarti un'ultima volta per cortesia? Vorrei chiederti se sei così gentile da spiegarmela perchè ci sono delle parti che non ho capito...
    Così se mi serve di farne altre per altre tabelle posso farlo tranquillamente..

  3. #13
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da webking2003
    ..la seconda query mi estrae anche l'username!
    Lo so cosa ti estrae.
    Nel caso, come già scritto anche quello, tizio sia amico di caio e viceversa, però ottieni due volte lo stesso nominativo nel caso ti servano anche tutte le altre informazioni.

  4. #14
    Beh se io sono amico tuo nella tabella esiste un solo record per cui non dovrebbe estrarlo due volte...

    effettivamente la riga si crea nel momento in cui io ti invio la richiesta,poi se tu me la accetti allora metto il valore del Request status a 1 altrimenti no..

    O sbaglio?

  5. #15
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mentre mi accingevo a spiegarti il senso della query mi sono reso conto dell'inutilità dell'if che avevo scritto.

    La query definitiva la farei in questo modo

    codice:
    select a.*,u.username as nome from amicizie as a
    inner join utenti as u on a.to_friend= u.id
    where from_friend=1 and request_status=1 and friend_blocker=1
    union
    select a.*,u.username from amicizie as a
    inner join utenti as u on from_friend = u.id
    where to_friend=1 and request_status=1 and friend_blocker=1
    order by nome
    Può esserti utile scomporla nelle due parti per capirla meglio

    codice:
    select a.*,u.username as nome from amicizie as a
    inner join utenti as u on a.to_friend= u.id
    where from_friend=1 and request_status=1 and friend_blocker=1
    In questa query, oltre alle altre condizioni, cerco solo i record nei quali l'dentificativo del campo from_friend è pari ad esempio a 1, cioè all'utente che ti interessa.
    Quindi vado a mettere in relazione l'identificativo del campo to_friend con l'id stesso della tabella utenti per poterne ricavare il nome letterale.

    Tramite la union accodo i record per i quali invece è il campo to_friend a essere pari a 1 e in questo caso quindi metterò in relazione il campo from_friend con l'altra tabella. L'unione delle due query produrrà il risultato atteso. Spero di essere stato chiaro.

  6. #16
    Era proprio l'if che non avevo capito :master:

    Grazie sei stato veramente GENTILISSIMO! E soprattutto hai avuto un'immensa pazienza!!

    Quindi non me li estrae 2 volte i risultati essendo una sola riga per amicizia...A me le estrazioni sembrano perfette!

    Graziee!

  7. #17
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da webking2003
    Era proprio l'if che non avevo capito :master:

    Grazie sei stato veramente GENTILISSIMO! E soprattutto hai avuto un'immensa pazienza!!

    Quindi non me li estrae 2 volte i risultati essendo una sola riga per amicizia...A me le estrazioni sembrano perfette!

    Graziee!
    Non conosco il funzionamento del tuo sistema di amicizie ma se dici che non è prevista la possibilità che ci siano due record del tipo

    codice:
    from_friend to_friend
    1               2
    2               1
    il problema dei nominativi duplicati non si pone. Lieto di esserti stato utile.

  8. #18
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ah, ora ricordo.
    Quell'if l'avevo tirato fuori nella prima query che estraeva solo i nominativi. Dovendo estrarre solo quelli senza tutte le altre informazioni era possibile risolvere anche l'eventuale problema di nominativi duplicati.

    codice:
    select u.username from utenti as u 
    inner join (
    select distinct if(from_friend=1,to_friend,from_friend) as amici
    from amicizie
    where (from_friend=1 or to_friend=1) and request_status=1 and friend_blocker=1) as tab
    on u.id = tab.amici
    order by u.username
    La condizione del where era che O il campo from_friend O quello to_friend fossero uguali all'id richiesto. Quindi l'if mi serviva perchè nel caso l'identificativo dell'utente fosse stato trovato nel campo from_friend, andavo a creare la join in base all'id del campo to_friend o viceversa.

    Nell'altra query l'if risulta inutile in quanto viene specificato nel where in quale campo cercare.

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.