Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1

    [MYSQL] Problema di query e chiavi esterne

    Salve a tutti. Ho un problema di questo tipo:

    Su un database chiamato 'piscina' ho, tra le altre, 3 tabelle di cui una è una (m,n) delle altre due.
    Devo fare una query su file php che mi aggiunga un'utente tramite form html.

    Le tabelle son cosi inizializzate:

    create table utente(
    id_utente int primary key auto_increment,
    nome varchar(20) not null,
    cognome varchar(30) not null,
    indirizzo varchar(40) not null,
    tel varchar(10)
    );

    create table attivita(
    id_attivita int primary key auto_increment,
    descrizione varchar(30) not null,
    giornate varchar(40) not null,
    orario varchar(40) not null,
    nmax_iscritti tinyint,
    data_inizio date,
    data_fine date,
    costo decimal (5,2),
    id_abb int,
    foreign key (id_abb) references abbonamento (id_abb) on update cascade on delete cascade
    );

    create table lezioni(
    id_utente int,
    id_attivita int,
    primary key (id_utente, id_attivita),
    foreign key (id_utente) references utente (id_utente) on update cascade on delete cascade,
    foreign key (id_attivita) references attivita (id_attivita) on update cascade on delete cascade
    );


    La riga php è questa:

    $inserimento=mysql_query("INSERT INTO lezioni(id_utente,id_attivita) VALUES ('select id_utente from utente where nome=$nomeut and cognome=$cognomeut and indirizzo=$indirizzout ', 'select id_attivita from attivita where (attivita.descrizione)=($corso)')") or die ("ERRORE!!?!".mysql_error());

    e l'errore che mi da è questo:

    ERRORE!!?!Cannot add or update a child row: a foreign key constraint fails (`piscina`.`lezioni`, CONSTRAINT `lezioni_ibfk_1` FOREIGN KEY (`id_utente`) REFERENCES `utente` (`id_utente`) ON DELETE CASCADE ON UPDATE CASCADE)

    ora, considerando che le query prese singolarmente su terminale funzionano perchè le ho verificate, che potete consigliarmi?

    grazie in anticipo!




  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    premetto che non conosco bene Mysql, ma perchè fai:

    on update cascade ???

    foreign key (id_utente) references utente (id_utente) on update cascade on delete cascade,

    io penso che il tuo errore sia dovuta ad una cattiva manipolazione delle FK


    ma forse mi sbaglio!

  3. #3
    Quote Originariamente inviata da 123delphi321 Visualizza il messaggio
    premetto che non conosco bene Mysql, ma perchè fai:

    on update cascade ???

    foreign key (id_utente) references utente (id_utente) on update cascade on delete cascade,

    io penso che il tuo errore sia dovuta ad una cattiva manipolazione delle FK


    ma forse mi sbaglio!

    faccio cosi perchè, essendo una tabella (m,n), facendo on update cascade (teoricamente), aggiornando i dati della tabella di riferimento si devono aggiornare automaticamente pure li! stesso discorso col delete, cancellando una riga da una tabella si rimuove pure da li!

    Sempre se ho capito bene io, sia ben chiaro

    Ho pensato pure io che ci fosse un'errore sulla gestione delle FK, ma dopo varie modifiche, sono arrivato ad un vicolo morto!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    scusa ma cosa significa 'tabella (m,n)' ?

    'on cascade delete' serve nel caso in cui elimini il record id dalla tabella principale vengono eliminati in cascata tuti i record che fanno riferimento a quell'id.

    con update on cascade cosa dovrbbe fare?

  5. #5
    Quote Originariamente inviata da 123delphi321 Visualizza il messaggio
    scusa ma cosa significa 'tabella (m,n)' ?

    'on cascade delete' serve nel caso in cui elimini il record id dalla tabella principale vengono eliminati in cascata tuti i record che fanno riferimento a quell'id.

    con update on cascade cosa dovrbbe fare?
    scusami ti rispondo citando la definizione da dove ho tratto spunto perchè a volte quando mi spiego, sembro uno zulù!
    "ON UPDATE CASCADESpecifica che se si tenta di aggiornare un valore di chiave in una riga e a tale valore fanno riferimento chiavi esterne in righe esistenti in altre tabelle, tutti i valori che compongono la chiave esterna verranno anch'essi aggiornati al nuovo valore specificato per la chiave "


    in pratica, nella tabella "lezioni", ho ad esempio 'id_utente' , che è chiave esterna e fa riferimento alla chiave primaria della tabella 'utente'.
    Sempre se ho ben capito, modificando 'id_utente' dalla tabella 'utente', si dovrebbe modificare automaticamente anche nella tabella 'lezioni', grazie ad 'on update cascade'!

  6. #6
    ciao,

    ado occhio la struttura delle tabelle mi sembra corretto... La query mi sembra scritta un po male..cosa vuoi fare con la query?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    ciao,

    ado occhio la struttura delle tabelle mi sembra corretto... La query mi sembra scritta un po male..cosa vuoi fare con la query?
    ciao!
    In pratica con questa query dovrei prendere 3 dati mediante get da un form che mi gestisce l'iscrizione di un nuovo utente ad un corso.

    In una query precedente registro il nuovo utente nella tabella utente, e ok.
    Poi con questa seconda query dovrei salvare nella tabella 'lezioni' l'id_utente' del nuovo arrivato e abbinarlo ad id_attività, che non è altro che la chiave primaria della tabella contenente tutte le attività disponibili!

    ho fatto degli echo sui dati che passo con get, e me li stampa giusti, quindi il problema non sembra giungere da li..

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    scusa ma cosa significa 'tabella (m,n)' ?


    per update è cosi come lo descrivi!

    ma tu madifichi l'id della tabella utente? potresti spiegarmi a cosa ti serve?

  9. #9
    prova una cosa del genere:
    codice:
    $inserimento=mysql_query("INSERT INTO lezioni(id_utente,id_attivita) VALUES ((select id_utente from utente where nome=$nomeut and cognome=$cognomeut and indirizzo=$indirizzout ), (select id_attivita from attivita where (attivita.descrizione)=($corso)))") or die ("ERRORE!!?!".mysql_error());
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  10. #10
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    prova una cosa del genere:
    codice:
    $inserimento=mysql_query("INSERT INTO lezioni(id_utente,id_attivita) VALUES ((select id_utente from utente where nome=$nomeut and cognome=$cognomeut and indirizzo=$indirizzout ), (select id_attivita from attivita where (attivita.descrizione)=($corso)))") or die ("ERRORE!!?!".mysql_error());

    posto il risultato:

    ERRORE!!?!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'romito 44 ), (select id_attivita from attivita where (attivita.descrizione)=(Cor' at line 1

    comunque ripeto, le query prese e incollate a terminale con mysql, funzionano! quindi direi che il problema non sta li..!
    Grazie!

Tag per questa discussione

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 © 2026 vBulletin Solutions, Inc. All rights reserved.