• User

    Aiuto, come estrarre i dati da più tabelle

    Ciao a tutti.

    Vorrei farvi una domanda: secondo voi è possibile selezionare ed estrarre contemporaneamente tutti i dati da più di una tabella dello stesso database?

    Fino ad oggi io ho sempre selezionato i dati da una sola tabella con un comando del tipo:

    $query = "SELECT * FROM topolino";

    Se volessi estrasse contemporaneamente tutti i dati da 10 tabelle e ogni tanto ne aggiungo delle altre, come faccio?

    Grazie mille, ciao.


  • User Attivo

    Sì, è possibile
    [PHP]SELECT campo1, campo2, campo3, [...] FROM tabella1, tabella2, tabella3, [...][/PHP]
    ma una query così, seppur funzionante, non avrebbe senso se non gli metti un parametro (clausola) che gli dia un ordine (sempre che sia richiesto). Solitamente si fa con il comando WHERE.


  • User

    Ciao Oslino, grazie per la risposta.

    Avevo pensato a questa soluzione, ma se in futuro dovessi aggiungere altre tabelle al database? Non posso stare sempre a modificare il codice.

    Quello che vorrei riuscire a scrivere è una cosa del genere:

    [PHP]SELECT * FROM .... [/PHP]

    dopo FROM vorrei non scrivere il nome delle tabelle ma dirgli di selezionare tutte le tabelle presenti nel database.

    Spero di essere riusci a spiegarmi.

    Grazie, ciao.


  • User Attivo

    Sinceramente non credo che esista un comando SQL che faccia quel che vuoi tu e se c'è non ne ho mai sentito parlare.
    Avresto bisogno di qualcosa del tipo
    [PHP]SELECT * FROM * [/PHP]
    che comunque rimane senza senso dato che ti darebbe come risultato il prodotto di ogni campo delle tabelle moltiplicato per ogni campo delle altre tabelle, in pratica una enorme ripetizione degli stessi valori.
    Non so se funziona, non l'ho mai provato e sarei curioso di sapere se lo prende!
    Prova e facci sapere.


  • User

    Ciao Oslino, ho provato la tua soluzione, ma purtroppo non funziona.

    Questo è quello che ho scritto:

    [PHP]$query = "SELECT * FROM *";$select = @mysql_query($query) or die("Query fallita !!!");[/PHP]

    Altre idee?

    Ciao.


  • User Attivo

    Ciclo? Se gli dai numeri incrementali come suffisso al nome delle tabelle puoi tentare così:

    [PHP]$array = array();
    $base = "nometabella_";
    $i = 0; //Se la prima tabella è nometabella_0 e le successive 1, 2, 3...
    while(mysql_query("DESCRIBE " . $base.$i)) { //Finché esiste la tabella
    $result = mysql_query("SELECT * FROM " . $base.$i); //Query
    while($user = mysql_fetch_array($result)) {
    array_push($array, $user); //Metto tutti i risultati nell'array, al termine qui avrò i risultati di tutte le tabelle
    }
    $i++;
    }[/PHP]

    Non so che ci devi fare e se ha senso, però in teoria qualcosa del genere dovrebbe funzionare.


  • User Attivo

    Ciao samurai.sette, a mio avviso una delle possibili cause del problema sta nel fatto che siano utilizzate funzioni MySQL deprecate, mi riferisco a questa:

    @samurai.sette said:

    mysql_query($query)

    che dovrebbe essere convertita nella nuova mysqli_query(). Per approfondimenti rimando alla guida ufficiale.
    Mi preme far notare che con la nuova versione di PHP7 le vecchie funzioni MySQL, come quella citata, non sono più disponibili.

    Buon lavoro.


  • User

    Ciao ragazzi, ho provato le vostre soluzioni ma purtroppo non va...
    Non so proprio come fare :arrabbiato:


  • User Attivo

    Ciao samurai.sette
    potresti costruire una pagina php in cui selezioni le tabelle da mettere in query, o il processo deve essere automatico? Detto ciò io, se le tabelle non devono essere messe in JOIN per qualche motivo, farei query separate


  • User

    Ciao PietroR. Grazie per la risposta.

    Il processo deve essere automatico, nel senso che quando aggiungo una tabella al database deve automaticamente estrarre tutti i suoi dati.
    Preciso anche che la struttura delle tabelle varia da tabella a tabella.

    Ciao.


  • User Attivo

    Secondo me, se anche la struttura della tabella cambia non credo che ci sia modo di intervenire se non da codice.


  • User

    ciao, dovresti fare una query che ti dia come risultato i nomi delle tabelle del db e salvare il risultato in un array, dopodichè lo scorri con un ciclo ed estrai i record per ogni tabella:

    $sql = "SHOW TABLES FROM my_database";
    $result = mysql_query($sql);

    while($row = mysql_fetch_row($result)) {
    $tabella = $row[0];
    $risultato = mysql_query("SELECT * FROM $tabella") or die(mysql_error());

    }