Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476

    [MYSQL] Creare tabella temporanea come join di due tabelle..

    ciao raga,

    come si fa a creare una tabella temporanea partendo da questa query?

    codice:
    $query = "SELECT DISTINCT tb_citta.Provincia, tb_ricerca.Id_Ditta, tb_ricerca.RagioneSociale FROM ((tb_citta INNER JOIN tb_ricerca ON tb_citta.Provincia=tb_ricerca.Provincia) INNER JOIN tb_indici ON tb_indici.Id_Ditta= tb_ricerca.Id_Ditta) WHERE Regione='$_GET[isc]' AND Settore='$_GET[ssc]' ORDER BY RagioneSociale";
    Conviene usare gli alias e al posto di INNER JOIN il solo JOIN, per velocizzare l'esecuzione della query?

    grazie

    ciao

  2. #2
    che io sappia l'inner join è identico al join normale (cioè quello che si ottiene con la virgola). Userei la virgola se non altro per migliorare la leggibilità della query

    per creare la tabella temporanea da una query basta scrivere

    codice:
    CREATE TEMPORARY TABLE nomeTabella
    e di seguito la SELECT

    non so se era questo che ti serviva...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    ciao,

    grazie per l'intervento, ma ti chiedo di illuminarmi sull'uso della virgola nella query (puoi farmi un esempio su quella query?)

    non mi è chiaro come fare per creare la tabella temporanea su quella query, mi puoi fare qui un esempio sempre sulla stessa queri

    grazie

    ciao

    dies

  4. #4
    Questo è quello che hai scritto tu
    codice:
    SELECT DISTINCT 
    tb_citta.Provincia, 
    tb_ricerca.Id_Ditta, 
    tb_ricerca.RagioneSociale 
    
    FROM 
    ((tb_citta INNER JOIN tb_ricerca ON tb_citta.Provincia=tb_ricerca.Provincia) 
    INNER JOIN tb_indici ON tb_indici.Id_Ditta = tb_ricerca.Id_Ditta) 
    
    WHERE Regione='$_GET[isc]' AND Settore='$_GET[ssc]' 
    
    ORDER BY RagioneSociale
    Ed è assolutamente corretto sintatticamente. Io dicevo solo di usare un modo diverso di scrivere il join, ma solo perchè io uso quello e lo trovo più chiaro. Con riferimento alla tua query:

    codice:
    SELECT DISTINCT 
    tb_citta.Provincia, 
    tb_ricerca.Id_Ditta, 
    tb_ricerca.RagioneSociale 
    
    FROM tb_citta, tb_ricerca, tb_indici
    
    WHERE
    tb_citta.Provincia = tb_ricerca.Provincia AND
    tb_indici.Id_Ditta = tb_ricerca.Id_Ditta AND
    Regione='$_GET[isc]' AND 
    Settore='$_GET[ssc]'
    
    ORDER BY RagioneSociale
    in pratica elenchi nella clausola FROM le tabelle di cui vuoi effettuare il join separate dalla cirgola e nella clausola WHERE elenchi le condizioni secondo cui unire le tabelle che sono poi le stesse che hai inserito nella tua query dopo ON (qualcosa = qualcos'altro).

    Riguardo alla costruzione della tabella temporanea se scrivi questo

    codice:
    CREATE TEMPORARY TABLE nomeTabella
    
    SELECT DISTINCT 
    tb_citta.Provincia, 
    tb_ricerca.Id_Ditta, 
    tb_ricerca.RagioneSociale 
    
    FROM 
    ((tb_citta INNER JOIN tb_ricerca ON tb_citta.Provincia=tb_ricerca.Provincia) 
    INNER JOIN tb_indici ON tb_indici.Id_Ditta = tb_ricerca.Id_Ditta) 
    
    WHERE Regione='$_GET[isc]' AND Settore='$_GET[ssc]' 
    
    ORDER BY RagioneSociale
    Lui ti crea una tabella temporanea che ha per colonne gli elementi che hai selezionato ovvero Provincia, Id_Ditta e RagioneSociale e per righe il risultato della SELECT

    spero sia più chiaro
    ciauz

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    ti ringrazio, ora mi è tutto più chiaro.


    ma ho un problema:

    se lancio la query:
    codice:
    $query = "CREATE TEMPORARY TABLE nomeTabella SELECT DISTINCT
    tb_citta.Provincia, 
    tb_ricerca.Id_Ditta, 
    tb_ricerca.RagioneSociale 
    
    FROM 
    ((tb_citta INNER JOIN tb_ricerca ON tb_citta.Provincia=tb_ricerca.Provincia) 
    INNER JOIN tb_indici ON tb_indici.Id_Ditta = tb_ricerca.Id_Ditta) 
    
    WHERE Regione='ABRUZZO' AND Settore='tessile' 
    
    ORDER BY RagioneSociale
    ";
    
    $result = mysql_query($query, $db);
    $id = 1;
    while ($row = mysql_fetch_assoc($result)){  <- questa è la linea 26
    mi segnala questo errore...

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\apache\site\create.php on line 26


    cosa può essere?

    grazie,

    dies

  6. #6
    Probabilmente c'è qualche errore sintattico nella query che hai scritto

    quando esegui una query metti sempre un controllo sull'esito e la stampa degli eventuali errori sql generati altrimenti non vedi quello che è successo durante l'esecuzione della query sul db

    codice:
    $result = mysql_query($query, $db) or die(mysql_error());

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    ciao,

    ho capito dove è il problema. In pratica quando aggiungo nella

    SELECT il campo tb_ricerca.E-Mail mi genera quell'errore... come è possibile?

    ho visto nel database ed il campo è di questo tipo:

    E-Mail longtext Si NULL

    In alcuni record il valore è presente in altri no.


    come risolvo?


    grazie



    dies

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    ciao ho seguito il tuo suggerimento mi viene fuori questo

    Unknown column 'tb_ricerca.E' in 'field list'


    VVoVe:




  9. #9
    il problema è che non gli piace il '-' nel nome del campo 'E-mail'

    rinomina il campo e chiamalo 'email'

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,476
    ciao ho risolto cambiando il nome del campo

    praticamente MySQl non accetta nomi con - VVoVe:


    Permettimi di chiederti, come posso fare con una select controllare che tra gli Id_Ditta non vi siano dei duplicati?


    grazie per la pazienza.


    dies

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.