Visualizzazione risultati 1 fino 10 di 10

Discussione: query per più tabelle

  1. #1
    Guest

    Predefinito query per più tabelle

    Vorrei sapere qual'è il sistema migliore per trovare un campo relativo allo stesso utente su più tabelle diverse.

    Ad es: tabella relativa ai dati di registrazione
    tabella relativa al profilo personalizzato
    tabella relativa alle foto

    Immagino dovrebbe esserci un indice o qualcosa del genere per fare la query su più tabelle.
    E' consigliabile utilizzare l'ID come indice? oppure un codice utente composto da più cifre o il nickname come forse fa Altervista per localizzare i dati di ogni utente? che consigli mi date?
    Ultima modifica di SideExtreme : 06-04-2006 alle ore 16.29.07

  2. #2
    Guest

    Predefinito

    Ogni utente (quindi ogni record) nella tabella 'users' (quella principale) avrà oltre alle altre info, un ID univoco, che sarà appunto l'indice.
    questo ID dovrai propagarlo anche nelle altre tabelle, ad esempio:
    Tabella FOTO:
    -id
    -user_id
    -nomefoto
    ecc.

    dove id sarà l'indice della foto, invece userid sarà il valore dell'id della tabella users.
    In questo modo potrai ricavare tutte le info usando una sola query, ad esempio:

    SELECT users.nome, foto.nome FROM users LEFT JOIN foto ON users.id=foto.userid


    Ciaoooooo!!!!!!

  3. #3
    Guest

    Predefinito

    Ditemi pure se dico cavolate...
    Ma questa user_id che dovrebbe essere univoca per ogni utente dovrei propagarla nelle altre tabelle al momento in cui vengono inseriti i dati nella prima tabella users, quindi verrebbero creati dei campi vuoti nelle altre tabelle a parte il campo user_id... dico vuoti perchè l'inserimento dei dati avviene in pagine sparate, non viene fatta un unica insert.
    Dopo di che dovrei fare un Update dei campi rimasti vuoti per inserire i dati nelle altre tabelle?
    Ultima modifica di SideExtreme : 06-04-2006 alle ore 18.08.08

  4. #4
    Guest

    Predefinito

    si proprio cosi devi fare!

  5. #5
    Guest

    Predefinito

    Scusate se torno sullo stesso argomento ma non mi sono ancora chiare alcune cose...
    Ho capito come selezionare e unire più tabelle utilizzando il comando Join ma questo mi pare serva esclusivamente per effetturare delle ricerche...
    MI chiedo se sia possibile fare un unica INSERT su più tabelle separate attraverso la stessa query... questo per evitare di fare query multiple per ogni Insert. Vorrei snellire il codice.
    Attualmente l'unico metodo che mi è venuto in mente si può riassumere in 6 step:

    1- Inserisco i dati nella prima tabella

    $query = "INSERT INTO utenti_reg (campo1,campo2,campo3,campo4) VALUES ('$campo1','$campo2','$campo3','$campo4')";

    mysql_query($query, $db);

    2- recupero id autoincrementato e lo assegno a user_id

    $user_id = mysql_insert_id();

    3 - modifico user_id della tabella appena creata

    $query = "UPDATE utenti_reg SET user_id='$user_id' WHERE id='$user_id'";
    mysql_query($query, $db);

    4 - Propago user_id a nuova tabella priva di dati

    $query = "INSERT INTO profilo_utenti (user_id) VALUES ('$user_id')";
    mysql_query($query, $db);

    5 - creo form con campo di type Hide per inviare $user_id e carico automaticamente la nuova pagina.

    6 - Recupero $user_id e modifico i dati della tabella profilo_utenti con i nuovi dati recuperati dal form

    @$user_id = $_POST['user_id']

    $query = "UPDATE utenti_reg SET campo1='$campo1',campo2='$campo2',campo3='$casmpo3 ',campo4='$campo4'WHERE user_id='$user_id'";

    mysql_query($query, $db);

    7 - Non ho ancora provato questo sitema e mi chiedo se ne esistono di migliori..
    Ultima modifica di SideExtreme : 12-04-2006 alle ore 04.21.28

  6. #6
    Guest

    Predefinito

    Ma non serve avere due campi ('id' e 'user_id') con lo stesso valore!!
    Quindi il passaggio 3 lo cancelli.
    La tabella profilo_utenti a che serve se hai già utenti_reg? Sono la stessa cosa, infatti nella prima tabella non hai nessun tipo di informazioni se non l'user_id che è già presente nella seconda tabella!
    Il passaggio 6 è esatto ovviamente apportando le dovute modifiche (il nome del campo 'user_id').

    Per quanto riguarda l'INSERT su più tabelle, non si può fare.


    Ciaooooooooo!!!!!!!

  7. #7
    Guest

    Predefinito

    Avevo pensato di dividere i campi ID e user_id perchè il campo ID essendo di tipo autoincremento potrebbe non risultare uguale per entrambe le tabelle nel caso un utente si registra allo stesso momento. Dovrei avere la certezza che questi 2 utenti abbiano un ID uguale per entrambe le tabelle.
    Le tabelle utenti_reg e profilo_utenti contengono informazioni diverse, ed è più comodo dividerle.
    Mettiamo caso che un utente invia i dati alla prima tabella, l'ID si autoincrementa e passa a compilare il secondo form.
    Arriva un altro utente che è più veloce del primo a compilare quindi l'ID della prima tabella si autoincrementa con un ID di valore maggiore del primo utente.
    Questo utente più veloce compila anche il secondo form e invia i dati.
    A questo punto la seconda tabella che non ha ancora ricevuto l'ID del primo utente registra i valori del secondo utente con l'ID del primo utente...
    Quì ci ritroviamo con ID diversi per 2 utenti diversi e non va bene, quindi è necessario avere una user_id che registri lo stesso valore per ogni utente.
    Avevo pensato di passare lo stesso ID da una pagina all'altra, ma ora che ci penso meglio dovrei utilizzare una variabile di sessione per avere 2 valori distinti per lo stesso utente.... scusate il casino ma sono agli inizi.... penso ci siano passati un po tutti....

  8. #8
    Guest

    Predefinito

    io ti consiglio di fare cosi:

    Codice PHP:
    mysql_query("INSERT INTO tabella (campo1, campo2) VALUES ('1', '2')", $db); //inserisci l'utente nella prima tabella

    $id = mysql_insert_id();//recuperi l'id appena inserito

    mysql_query("INSERT INTO (id, campo1, campo2) VALUES ('$id', '1', '2')", $db);//in questa tabella il campo id NON è autoincrement, quindi gli pasi quello appena inserito nell'altra tabella

  9. #9
    Guest

    Predefinito

    Ma se questa cosa la fai nello stesso script (quindi nello stesso momento) è inutile, perchè la variabile che vai a memorizzare nel campo user_id sarà *sempre* l'ID appena inserito (che infatti recuperi con mysql_insert_id()).
    Il tuo discorso invece è valido se il tutto deve essere eseguito in più step (in più form); ma il fatto è che non ho capito se è tutto in una volta o in più pagine.


    Ciaooooo!!!

  10. #10
    Guest

    Predefinito

    No mi ero confuso, pensavo di dover inserire l'ID nelle tabelle per ogni form da pagine diverse ma non mi conviene. Ho inserito lo stesso ID in tutte le tabelle dalla stessa pagina in questo modo è più sicuro dopo non resta che fare l'UPDATE alle pagine successive...grazie per l'aiuto
    Ultima modifica di SideExtreme : 12-04-2006 alle ore 20.13.54

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •