Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    27

    unire i risultati di diverse query

    Salve a tutti, è possibile unire i risultati di più query?
    Non vanno bene UNION o JOIN perchè le query vengono chiamate in una funzione ricorsiva e quindi non so quante query saranno create quando viene chiamata la funzione.
    Vorrei poter unire i risultati "mysqli_fetch_assoc" ottenuti da tutte le varie chiamate .

    ad esempio:

    codice:
        $sql = "SELECT * FROM utenti WHERE padre = iduser ";
        $result = mysqli_query($connection, $sql);
        $result = mysqli_fetch_assoc($result);
    
        $sql2 = "SELECT * FROM utenti WHERE padre = iduser ";
        $result2 = mysqli_query($connection, $sql);
        $result2 = mysqli_fetch_assoc($result2);
    come faccio ad ottenre una variabile che contiene $result e $result2 ????

  2. #2
    cosa vorresti ottenere di preciso? perchè non fare la chiamata ricorsiva dentro mysql ad esempio?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    27
    Voglio tutta la gerarchia a partire da un utente, conservata in un vettore e ben ordinata.
    Quando eseguo una query e faccio $result= mysqli_fetch_assoc($result), ottengo un vettore che contiene tutte la tuple be ordinate.
    Quindi per ogni chiamata ricorsiva che faccio nella funzione voglio che vengano aggiunti alla variabile $result tutte le tuple trovate così da ottenre alla fine delle chiamate esattamente tutti gli utenti che sono figli dell'utente iniziale.

  4. #4
    Guarda,

    data una tabella Utenti (id, parent_id) potresti fare una query del genere:

    codice:
    with recursive my_users as(  
    select id,parent_id,0 as level from UTENTI where id=XXX
    union all
    select p.id, p.parent_id,my_users.level+1 as level from UTENTI p, my_users where p.id = my_users.parent_id)
    select * from my_users order by level asc;
    dato l'utente con id XXX ti tira fuori l'utente con l'ID XXX e tutti i figli/nipoti/pronipoti/etc. In questo caso viene aggiunto come iterazione 0 quella di selezionare l'utente XXX e le successive iterazioni invece sono la ricorsione vera e propria. Altrimenti se non ti serve l'utente XXX, come iterazione 0 metti select id,parent_id,1 as level from UTENTI where parent_id = XXX. Ovviamente "level" è aggiunto per comodità giusto per poter ordinare la query per "livello".

    Detto questo, questa query è per Postgresql ma dovrebbe funzionare così com'è con Mysql. Altrimenti fai un chcek sul manuale per il costrutto "with recursive" che mi pare sia implementato uguale (ho intravisto degli esempi in merito)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    27
    wooo grazie mille, devo studiarmi tutto !

  6. #6
    scusa ho sbagliato query, questa "risale" l'albero. Per farlo scendere è p.parent_id = my_users.id. Scusa ma copia e incolla + cambio nomi campi è una brutta bestia

    quindi:

    codice:
    with recursive my_users as(  
    select id,parent_id,0 as level from UTENTI where id=XXX
    union all
    select p.id, p.parent_id,my_users.level+1 as level from UTENTI p, my_users where p.parent_id= my_users.id)
    select * from my_users order by level asc;
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    27
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    scusa ho sbagliato query, questa "risale" l'albero. Per farlo scendere è p.parent_id = my_users.id. Scusa ma copia e incolla + cambio nomi campi è una brutta bestia

    quindi:

    codice:
    with recursive my_users as(  
    select id,parent_id,0 as level from UTENTI where id=XXX
    union all
    select p.id, p.parent_id,my_users.level+1 as level from UTENTI p, my_users where p.parent_id= my_users.id)
    select * from my_users order by level asc;
    Ciao e grazie mille, purtroppo ho un po di problemi a capire e a far funzionare la query, ho cercato in rete ma il materiale sulle query ricorsive è davvero pochissimo, ho provato a crcare qualcosa anche su un testo mysql che ho, ma nulla! ho trovato solo una paio di post su stackoverflow ma sono anche più complicati!

    ti posto la funzione col quale faccio delle prove:
    codice:
    function prova($userId)
    {
        $connection = getConnection();
    
        $sql = "with recursive my_users as(  
                select id_user,padre,1 as level from utenti where id_user=1
                union all
                select p.id_user, p.padre,my_users.level+1 as level from utenti p, my_users where p.padre = my_users.id_user)
                select * from my_users order by level asc";
        
        $result = mysqli_query($connection, $sql);
        //print_r($result);
        $result = mysqli_fetch_assoc($result);
        
    }

    quando provo ad eseguirla mi da qusto errore:
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\www\.......

    Mentre se commento $result=mysqli_fetch_assoc($result); non ottengo nulla, pagina bianca!

  8. #8
    esegui la query direttamente in phpmyadmin e vedi che succede
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    ok avevo letto male: le query di quel tipo non sono supportate in mysql, quindi bisogna tornare al PHP. Com'era il discorso in php? hai una funzione che deve diventare ricorsiva? fai vedere un pezzo di codice va
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    27
    Ciao è da ieri che hai postato la prima query che provo in phpmyadmin ma non riesco a farla andare, ottengo sempre errori di sintassi.
    La query che provo è questa:
    codice:
    with recursive my_users as(  
    select `id_user`,`padre`,1 as level from `utenti` where id_user = 1
    union all
    select `p.id_user`, `p.padre`,`my_users.level`+1 as level from `utenti` `p`, `my_users` where p.padre = my_users.id_user)
    select * from `my_users` order by `level` asc
    L'errore che ottengo è questo:
    codice:
    #1064 - You have an error in your SQL syntax; check the manual that  corresponds to your MySQL server version for the right syntax to use  near 'recursive my_users as(   select `id_user`,`padre`,1 as level from `utenti` wher' at line 1

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.