Visualizzazione risultati 1 fino 9 di 9

Discussione: [Mysql] Confronto tra tabelle ed inserimento dati- Comando JOIN (Credo)

  1. #1
    Guest

    Predefinito [Mysql] Confronto tra tabelle ed inserimento dati- Comando JOIN (Credo)

    Salve a tutti, provo anche qui a spiegare un bel problemino che ho, sperando che questa comunità possa essermi d'aiuto, come sempre d'altra parte,

    cerco di spiegarmi

    ho diverse tabelle ma in questo caso poniamo il caso trattasi di 2

    TABELLA 1
    ID Nome Cognome CATEGORIA
    1 Pppo Pluto SUPER
    2 Topolino Minni TOP

    la tabella 2 e 3 invece hanno altri attriubti

    ma hanno in comune il campo categoria

    esempio
    TABELLA 2
    ID Nome Nazione Residenza ATTRIBUTI

    1___PIppo___America___Topolinia ____SUPER

    in questo caso ATTRIBUTI e CAEGORIA devono coincidere

    Considerando che il campo che cambia è CATEGORIA nella tabella 1 vorrei che lo script che farò in php confronta il nome in tabella 2 lo cerchi in tabella 1 e gli attricuisca in ATTRIBUTI la CATEGORIA

    spero di essemri spiegato

    ho capito che ci buole il join per il raffronto delle tabelle ma non riesco a far modificare ATTRIBUTI in basea CATEGORIA

    Resto in attesa di un vostro aiuto

    GRAZIE

  2. #2
    Guest

    Post confronto tra tabelle e inserimento

    ciao.. se ho capito bene tu hai 3 tabelle, ciascuna di esse ha un campo categoria..
    quello che ti consiglio di fare è creare una tabella CATEGORIA in cui inserirai tutte le categorie che hai previsto..dopo di che, l'attributo CATEGORIA delle tabelle 1, 2 e 3 dovrà riferire ad una tupla esistente della tabella CATEGORIA...questo lo fai nel seguente modo

    Codice:
    create table if not exists Categoria(
    	Id int auto_increment,
            Nome char(14),
    	primary key (Id)
    ) ENGINE=INNODB;
    
    create table if not exists Tabella1(
            Id int autoincrement,
    	Nome char(14),
    	Cognome char(14),
    	Categoria int,
    	primary key (Id),
            index categoria_ind_FK(Categoria),
    	foreign key (Categoria) references Categoria(Id)
      	on update cascade
      	on delete cascade
    ) ENGINE=INNODB;

    Quindi quando poi farai un inserimento nella tabella 1 dovrai assicurarti che il valore che inserisci nel campo Categoria, sia un Id valido per la tabella Categoria...

    ..spero di esserti stato di aiuto
    Ultima modifica di flab : 10-07-2010 alle ore 14.16.55

  3. #3
    Guest

    Predefinito join

    ...e per il join ti consiglio di dare un occhiata alla dovumentazione messa a disposizione sul sito di MySql (qui)... ovviamente nel tuo caso il join va esequito sullattibuto Categoria..
    Ultima modifica di flab : 10-07-2010 alle ore 19.51.57

  4. #4
    Guest

    Predefinito

    scusa flab

    mi sa mi sono spiegato male

    inanzitutto le tabelle sono due e nella seconda il campo nonha lo stesso nome della prima

    però vorrei che si aggiornasse tramite script php in base alla prima

    parlo sempre del campo

    cioè in base al nome il campo attributi della seconda deve aggiornarsi in funzione del campo categoria della prima

    spero di esse stato + chiaro e ti ringraizo per l'interessamento

  5. #5
    Guest

    Predefinito ..re:

    allora nn ho capito il problema...davvero..
    "inanzitutto le tabelle sono due e nella seconda il campo nonha lo stesso nome della prima"..questo non è un problema...ma si riferiscono alla stessa cosa??

    "però vorrei che si aggiornasse tramite script php in base alla prima"..sempre query sql devi scrivere no??

    "cioè in base al nome il campo attributi della seconda deve aggiornarsi in funzione del campo categoria della prima"...in base che vuol dire??che prende il valore presente nel campo categoria della prima??..

    ..davvero scusami ma non capisco il problema..cmq se vuoi inviarmi il tuo script, contattami in privato..trovi la mail nel mio spazio web...è ancora in costruzione..

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da flab Visualizza messaggio
    allora nn ho capito il problema...davvero..
    "inanzitutto le tabelle sono due e nella seconda il campo nonha lo stesso nome della prima"..questo non è un problema...ma si riferiscono alla stessa cosa??

    "però vorrei che si aggiornasse tramite script php in base alla prima"..sempre query sql devi scrivere no??

    "cioè in base al nome il campo attributi della seconda deve aggiornarsi in funzione del campo categoria della prima"...in base che vuol dire??che prende il valore presente nel campo categoria della prima??..

    ..davvero scusami ma non capisco il problema..cmq se vuoi inviarmi il tuo script, contattami in privato..trovi la mail nel mio spazio web...è ancora in costruzione..
    tranquillo probabilmente sono io che non riesco a spiegarmi, però ci stiamo avvicinando

    allora

    i due campi non hanno nome uguale e qua ci siamo ora
    provo a farti un esempio più semplice
    TABELLA 1
    ID__ nome ruolo CATEGORIA
    1 Maradona____Attaccante ORO
    2 Pele______Attaccante ORO
    3 Baggio_____Attaccante ARGENTO

    questa sarebbe la tabella principale

    poi ho la seconda tabella che presenta gli stessi campi

    ID Nome ruolo eta ATTRIBUTO

    1 Maradona____Attaccante 40 ORO
    2 Pele______Attaccante 40__ORO
    3 Baggio_____Attaccante 40__ORO

    ora ogni mese aggiorno la prima tabella e attualmente mi tocca aggiornare manualmente anche il campo ATTRIVUTO della seconda tabella,

    il dato che deve essere presente nel campo ATTRIBUTO della tabella 2 deve essere uguale al campo CATEGORIA della tabella n1

    quindi quando maradona della tabella 1 assume la categoria argento nella tabella due nella riga di maradona al campo ATTRIBUTO deve essrerci argento e non più ORO

  7. #7
    Guest

    Predefinito ..ora c siamo

    ho capito..forse..

    ..allora quello che ti consiglio è questo, seguendo il tuo esempio sui giocatori..
    fare un unica tabella GIOCATORE con gli attributi che deve avere, cioè id, nome, ruolo, cateoria..
    e poi invece che fare altre tabelle che hanno gli stessi record, ti consiglio di usare le viste..sono come tabelle ma create dinamicamente mediante query (tipo select e vari join)..
    la vista si comporta come una procedura, quindi invocandola, restituisce tutti i campi aggiornati presenti nella tabella originaria...ti consiglio sempre la solita documentazione sul sito di mysql..

    ..se l'esempio che m hai fatto è uguale al tuo problema, la scelta delle viste è la cosa più appropriata

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da flab Visualizza messaggio
    ho capito..forse..

    ..allora quello che ti consiglio è questo, seguendo il tuo esempio sui giocatori..
    fare un unica tabella GIOCATORE con gli attributi che deve avere, cioè id, nome, ruolo, cateoria..
    e poi invece che fare altre tabelle che hanno gli stessi record, ti consiglio di usare le viste..sono come tabelle ma create dinamicamente mediante query (tipo select e vari join)..
    la vista si comporta come una procedura, quindi invocandola, restituisce tutti i campi aggiornati presenti nella tabella originaria...ti consiglio sempre la solita documentazione sul sito di mysql..

    ..se l'esempio che m hai fatto è uguale al tuo problema, la scelta delle viste è la cosa più appropriata
    c'è un problema però

    io ho già tutto creato e che quasi tutto lo scritp su cui ho lavorato quasi un anno e che ocntine ben 1200 file in php, si collega anche alla tabella 1 quindi reimpostare il tutto è na pazzia e crcavo una soluzione alternativa dove poi magari creavo unos cript apposito epr far modificare le avarie tabelle in funzione del campo che si modifica nella tabella 1 il che sarebbe stato molto + conveniente che modificare i vari file

    non c'è altro verso secondo te?

  9. #9
    Guest

    Predefinito

    1200 file php??..questo è un grave problema di progettazione..prima o poi dovrai affrontare questo problema perche le tur tabelle diventeranno ingestibili...così come i file php...
    ti faccio un esempio...un anno fa feci un sito riguardante tutti i comuni della maremma...son piu di 60 comuni..ma grazie a php e sql, riuscivo a gestire tutto mediante 1 pagina php, che tramite la query adatta, riempica la pagina con i dati relativi al comune desiderato..

    ..cmq se proprio non ti va di modernizzare il tuo sito ho due soluzioni alternative..
    soluzione sql: consiste nell utilizzo di trigger (il trigger è una progedura automatica che scatta nel momento in cui viene modificato qlcosa...quindi nel tuo la sintassi è "quando viene modificato il campo categoria in tab1, modifica il campo TIPO di tab2")..guarda la sintassi sul solito sito sql

    soluzione php:tu sai quando (e dove nello script) avvengono le modifiche..puoi benissimo modificare lo script php che cambia i campi dell etabelle, in modo che dopo di esso ci sia la modifica anche ad altre tabelle..ad esempio...la modifica è avvenuta e tu in run time hai ancora i dati relativi alla modifica...fai una query per vedere se i dati son presenti nelle altre tabelle...se così è fai una modifica anche li...

    in entrambi questi modi, ci sarà da cancellare...non so ma credo da quanto m hai detto che nel tuo sito c è molto script (html,php,sql) ridondante, che si ripete..

    ma di certo quello che t serve è non modificare manualmente tutto gni volta!!!
    Ultima modifica di flab : 11-07-2010 alle ore 12.24.05

Regole di scrittura

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