Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554

    [Mysql] problema su join

    Ciao ho una struttura di questo tipo:
    tabella dyn_ordini:
    codice:
    id | id_utente | id_client | note | data      | stato
    -----------------------------------------------------
    1  |      1    |     3     | abc  |1123771687 |   0

    e uan tabella che contiene i miei utenti.

    Eseguo una query di questo tipo:
    codice:
    select dyn_ordini.*, dyn_utenti.ragione_sociale as utente, dyn_utenti.ragione_sociale as client
    from((dyn_ordini inner join dyn_utenti on dyn_ordini.id_utente = dyn_utenti.id)
    left outer join dyn_utenti as dyn_utenti2 on dyn_ordini.id_client = dyn_utenti2.id)
    where dyn_ordini.id_utente='1' order by dyn_ordini.data
    Io mi aspetto che nella tabella risultante la colonna utente sia l'utente con id=1 e la colonna client sia l'utente con id=3, invece mi restituisce la colonna utente corretta e nella colonna client c'è l'utente con id=1.
    Vivrò una vita intera e fortunatamente morirò una volta sola

  2. #2
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Un piccolo up
    Vivrò una vita intera e fortunatamente morirò una volta sola

  3. #3
    Originariamente inviato da pyotrex
    Un piccolo up
    uppa uppa.... l'ho letto due volte e non capisco che vuoi dire...

    Quando posti le query dovresti usarci la cortesia di metterle leggibili, anche se nel tuo caso non conoscendo la struttura delle tabelle e le relazioni non si puo' dare una risposta certa... e possibilmente usando gli alias per le tabelle. Le parentesi nel FROM e JOIN non servono. Sono tutte in AND.

    per esempio:
    codice:
    select o.*, 
    u.ragione_sociale as utente, 
    u.ragione_sociale as client
    from dyn_ordini as o
    inner join dyn_utenti as u on o.id_utente = u.id
    left join dyn_utenti as u2 on o.id_client = u2.id
    where o.id_utente = '1' 
    order by o.data
    Gia' cosi' si puo' vedere facilmente che estrai due volte lo stesso campo, una volta come utente ed un'altra come client...

    Miracoli non avvengono nel software.... (purtroppo)...


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

  4. #4
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554

    per piero.mac

    Grazie per l'attenzione rivoltami, in futuro seguirò i tuoi consigli, la query corretta è questa:
    codice:
    select o.*, 
    u.ragione_sociale as utente, 
    u2.ragione_sociale as client
    from dyn_ordini as o
    inner join dyn_utenti as u on o.id_utente = u.id
    left join dyn_utenti as u2 on o.id_client = u2.id
    where o.id_utente = '1' 
    order by o.data
    Vivrò una vita intera e fortunatamente morirò una volta sola

  5. #5
    codice:
    inner join dyn_utenti as u on o.id_utente = u.id
    left join dyn_utenti as u2 on o.id_client = u2.id
    vedi che cosi' e' piu' facile leggere la query... lo stesso u.id viene preso a confronto sia da o.id_utente che da o.id_client

    Dovrebbe esistere una relazione diversa, cioe' u2.id non puo' essere lo stesso di u.id, altrimenti come succede ora essendo tutto in AND, si ha che o.id_utente e' = a o.id_client. Poi nella condizione where limiti la scelta a o.id_utente = '1' . Ecco la ragione del risultato che ottieni.

    Da rivedere la query. Pero' non posso suggerire nulla perche' non conosco la relazione di o.id_client con l'altra tabella.


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

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.