Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema con LEFT JOIN, GROUP BY e ordinamento

    Salve a tutti, ho una query che pensavo banale, ma evidentemente mi sbagliavo.
    Ho 2 tabelle:

    id_contatto | nome | cognome
    1 | Mario | Rossi
    2 | Paolo | Rossi
    3 | Luca | Bianchi

    e l'altra che riguarda gli indirizzi

    id | id_contatto | indirizzo | _PREF | _POS
    1 | 1 | via numero 1 | 1 | 0
    2 | 1 | via numero 2 | 0 | 1
    3 | 1 | via numero 3 | 0 | 2
    4 | 2 | via prova 1 | 0 | 2
    5 | 2 | via prova 2 | 0 | 1
    6 | 3 | via prova 3 | 0 | 0
    7 | 2 | via ultima 1 | 1 | 0

    Mi servirebbe una query che mi desse questo risultato

    id_contatto | nome | cognome | indirizzo
    1 | Mario | Rossi | via numero 1
    2 | Paolo | Rossi | via prova 3
    3 | Luca | Bianchi | via ultima 1

    Il criterio sarebbe unire le persone all'indirizzo preferito se esiste (_PREF=1) oppure alla posizione minore (_POS più piccolo)
    Avete idea di come si faccia? Facendo una LEFT JOIN con GROUP BY non riesco ad ordinare per _PREF o _POS prende lui ciò che vuole. Uso MySql
    Grazie
    Rino
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2
    se avessi postato la query che usi sarebbe stato tutto più facile comunque, nel criterio ON della JOIN prova ad aggiungere AND tabella2._PREF=1 così ti prende solo il preferito

    (ma poi perché un underscore come primo carattere del nome di colonna? )

  3. #3
    hai perfettamente ragione. Solo che il DB vero è molto più complesso e la query la dovevo riscrivere da zero sapendo che era sbagliata e mi dava noia (ci sbatto la testa da 4 ore)
    La tua soluzione non va bene perche il record 2 (Paolo Rossi) non ha _PREF=1 perchè non c'è indirizzo con _PREF=1 e quindi deve saltare fuori quello con _POS minore
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  4. #4
    a parte il fatto che la 7 ha _pref=1 ed è riferita paolorossi... ma facciamo finta che è un errore di battitura

    quanto può essere al massimo _pos? 3? 10? 99?

  5. #5
    questa mettila in join con i nomi


    SELECT * FROM
    (SELECT *, _pref+_pos*100 xy FROM addr) T1
    JOIN
    (SELECT id_contatto, MIN(xy) xy from
    ( SELECT *, _pref+_pos*100 as xy
    FROM addr) T0
    group by T0.ID_contatto ) t2

    on t1.id_contatto=t2.id_contatto and t1.xy=t2.xy

  6. #6
    si scusami l'ultimo indirizzo era a luca bianchi... provo a capire la query che mi hai mandato che fa
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  7. #7
    ho provato ma non mi funziona... proviamo a semplificare: lasciando perdere la tabella contatti che andrebbe semplicemente in join, data la tabella indirizzi come posso trovare l'unico indirizzo per contatto che ha come caratteristica o _PREF=1 o _POS=MIN(_POS) (il minore dei _POS collegati al id_contatto)? Se risolvo questo il resto credo sia facile.
    Per ora sono riuscito a realizzare la query che mi ordina i dati, ma dopo non riesco a estrarre solo quello che mi interessa:
    Codice PHP:
    SELECT _POS,_PREF,id_contatto,ind,id AS idInd,
    (
    SELECT if(_PREF=1,0,if(_POS=MIN(_POS) AND _PREF=0,1,0)) AS PESO FROM indirizzi WHERE id=idInd) AS PESO 
    FROM indirizzi ORDER BY PESO 
    Grazie
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  8. #8
    io la query l'ho provata e funziona. è sql standard, quello di mysql non lo conosco così approfonditamente

  9. #9
    e se dovessi risolvere solo la seconda parte come dicevo?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  10. #10
    Boh, mi sembra di avertelo già detto che la mia query risolve proprio quel problema

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 © 2024 vBulletin Solutions, Inc. All rights reserved.