• User

    Query join tra database diversi

    Cari utenti sono incorso nel classico problema, nonostante ho spulciato tutti i vecchi post non sono riuscito a fare girare la mia query che estrae da due database contemporaneamente.

    Praticamente il mio è un forum, i messaggi vengono salvati sulla tabella forum del database admin_p_bacheca, e i dati relativi all'utente vengono salvati nella tabella user del database admin_pvg.

    [php]$iniziale = "SELECT admin_p_bacheca.forum.autore, admin_p_bacheca.forum.titolo, admin_p_bacheca.forum.messaggio, admin_p_bacheca.forum.data, admin_p_bacheca.forum.chiuso, admin_pvg.user.sesso, admin_pvg.user.villaggio, admin_pvg.user.araldica, admin_pvg.user.mestiere FROM admin_p_bacheca.forum, admin_pvg.user WHERE admin_p_bacheca.forum.id = '$messaggio' && admin_p_bacheca.forum.autore = admin_pvg.user.nome";
    $iniziale_exe = mysql_query ($iniziale);
    $iniziale_dati = mysql_fetch_array ($iniziale_exe);
    mysql_free_result ($iniziale_exe);[/php]
    Ecco la query che non riesco a fare girare, in quanto mi da il classico errore dato da query vuota.

    I database sono entrambi selezionati tramite mysql_select_db, alle voci $conn(admin_pvg) e $conn3 (admin_p_bacheca)

    Aiutooooooooo


  • User Attivo

    Ciao Siremar,
    il tuo problema non è banale, o meglio non lo è per me: join fra tabelle su diversi db non ne ho mai fatte. Speriamo che qualcuno possa dirci il contrario, ma per come la vedo io l'ultimo mysql_select_db annulla quello precedente, pertanto avresti sempre una sola tabella selezionata.

    Come sempre dipende dal caso specifico, ma generalmente è molto più facile cambiare l'approccio al problema che tentare di trovare soluzioni complicate. La clausola where nel tuo caso è:

    WHERE admin_p_bacheca.forum.id = '$messaggio' && admin_p_bacheca.forum.autore = admin_pvg.user.nome

    il che mi fa venire in mente, senza conoscere a fondo i termini del problema, che potresti spezzare la query in due. Prima selezioni admin_p_bacheca e fai una query del tipo:

    select ..... FROM forum WHERE id = '$messaggio'

    e ti fai restituire il campo autore:

    $row = mysql_fetch_array($result_db, MYSQL_ASSOC);
    $autore=$row['autore'];

    quindi selezioni il db admin_pvg e fai la query del tipo:

    select ..... FROM user WHERE nome = '$autore'

    In teoria (cioè se ho capito bene il tuo problema :D) il risultato dovrebbe essere come quello da te cercato.

    Fra tabelle di db diversi forse si riesce a fare delle UNION ma che non risolverebbe comunque il tuo problema.

    Aspettiamo tuoi feedback ed altri suggerimenti...
    :ciauz: