Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 41
  1. #1
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662

    Problema relazione tra due tabelle MySql

    Come suggeritomi da Satifal e Oly1984 in una precedente discussione vorrei relazionare due tabelle MySql, ma mi succede una cosa strana...

    Questo è il codice di riferimento:
    Codice PHP:
    CREATE TABLE `users` (
      `
    idint(4UNSIGNED NOT NULL AUTO_INCREMENT,
      `
    nomevarchar(20NOT NULL,
      `
    cognomevarchar(20NOT NULL,
      `
    usernamevarchar(20NOT NULL,
      `
    emailvarchar(60NOT NULL,
      `
    passwordvarchar(50NOT NULL,
      `
    key_controlvarchar(50NOT NULL,
      `
    verint(1NOT NULL DEFAULT '0',
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=;


    CREATE TABLE profile (
    `
    idINTusers_id INT,
    INDEX par_ind (users_id),
    FOREIGN KEY (users_idREFERENCES users(idON DELETE CASCADE,
    `
    opz1varchar(100NOT NULL,
    `
    opz2int(1NOT NULL DEFAULT '0',
    `
    opz3int(1NOT NULL DEFAULT '0',
    `
    opz4int(1NOT NULL DEFAULT '0',
    `
    opz5int(1NOT NULL DEFAULT '0',
    `
    opz6int(1NOT NULL DEFAULT '0',
    `
    opz7int(1NOT NULL DEFAULT '0',
    `
    opz8int(1NOT NULL DEFAULT '0',
    `
    opz9int(1NOT NULL DEFAULT '0',
    `
    opz10int(1NOT NULL DEFAULT '0',
    `
    opz11int(1NOT NULL DEFAULT '0',
    `
    opz12int(1NOT NULL DEFAULT '0',
    `
    opz13int(1NOT NULL DEFAULT '0',
    `
    opz14int(1NOT NULL DEFAULT '0',
    `
    opz15int(1NOT NULL DEFAULT '0',
    `
    opz16int(1NOT NULL DEFAULT '0',
    `
    opz17int(1NOT NULL DEFAULT '0',
    `
    opz18int(1NOT NULL DEFAULT '0',
    `
    opz19int(1NOT NULL DEFAULT '0'
    ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=
    Dovrebbe funzionare più o meno così: quando inserisco i dati nel form i dati di login (+nome e cognome) vanno nella prima tabella, mentre gli altri dati aggiuntivi nella seconda.

    Quando cancello un record nella prima tabella mi cancella anche i dati di riferimento della seconda.

    L'unico problema è che nella seconda tabella non mi popola i campi id e user_id!!!
    Rimangono null

    Sapreste dirmi dove ho cannato?

    graziegraziegrazie!!
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  2. #2

    Re: Problema relazione tra due tabelle MySql

    Originariamente inviato da bANART

    Sapreste dirmi dove ho cannato?
    salvo altre cose che non voglio considerare, la grossa cannatura e' che le foreign keys lavorano con le InnoDB e non con le MyIsam. Salvo eventuali miracoli dell'attuale governo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    E che ne puoi sapere!!
    Magari c'è qualcuno che ne trae vantaggi e spara subito un bel decreto

    A parte gli scherzi, effettivamente poi l'ho letto da qualche altra parte e ho aggiustato il tiro... MA NON VA ANCORA!!

    Le attuali tabelle sono le seguenti:
    Codice PHP:
    CREATE TABLE users (
       
    id_users int(11NOT NULL auto_increment,
       
    nome varchar(20NOT NULL,
       
    cognome varchar(20NOT NULL,
       
    username varchar(20NOT NULL,
       
    email varchar(60NOT NULL,
       
    password varchar(50NOT NULL,
       
    key_control varchar(50NOT NULL,
       
    ver int(1NOT NULL DEFAULT '0',
       
    PRIMARY KEY  (id_users)
    ENGINE=InnoDB;

    CREATE TABLE profile (
       
    id_profile int(11NOT NULL default '0',
       
    id_users int(11) default NULL,
       
    opz1 varchar(100NOT NULL,
       
    opz2 int(1NOT NULL DEFAULT '0',
       
    opz3 int(1NOT NULL DEFAULT '0',
       
    opz4 int(1NOT NULL DEFAULT '0',
       
    opz5 int(1NOT NULL DEFAULT '0',
       
    opz6 int(1NOT NULL DEFAULT '0',
       
    opz7 int(1NOT NULL DEFAULT '0',
       
    opz8 int(1NOT NULL DEFAULT '0',
       
    opz9 int(1NOT NULL DEFAULT '0',
       
    opz10 int(1NOT NULL DEFAULT '0',
       
    opz11 int(1NOT NULL DEFAULT '0',
       
    opz12 int(1NOT NULL DEFAULT '0',
       
    opz13 int(1NOT NULL DEFAULT '0',
       
    opz14 int(1NOT NULL DEFAULT '0',
       
    opz15 int(1NOT NULL DEFAULT '0',
       
    opz16 int(1NOT NULL DEFAULT '0',
       
    opz17 int(1NOT NULL DEFAULT '0',
       
    opz18 int(1NOT NULL DEFAULT '0',
       
    opz19 int(1NOT NULL DEFAULT '0' 
       
    PRIMARY KEY  (id_profile),
       
    FOREIGN KEY (id_usersREFERENCES users (id_users)
    ENGINE=InnoDB
    Continuo a cannare... ma non so dove!!!

    Mi da questo errore:

    #1064 - 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 '(id_profile), FOREIGN KEY (id_users) REFERENCES users (id_users) ) ENGINE=I' at line 23
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  4. #4
    cominciando ad entrare nel merito .... perche' fai un campo INT(1) che occupa 4 byte (e' un campo a dimensione fissa) quando potrebbe bastare un TINYINT(1) (1 byte) ??

    ti manca un virgola prima della definizione della chiave primaria nella seconda query.
    Mettere una chiave primaria con default 0 mi pare una cosa buffa, metti auto_increment.

    Generico: Non sperare che i campi si compilino da soli.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Capitano oh mio capitano, ho fatto come mi hai detto!

    FUNZIONA!!!! ...a metà...

    Le tabelle le accetta perfettamente, l'unica cosa è che pare non siano relazionate..
    Nella seconda tabella il campo id_users (che dovrebbe essere quello che relaziona le due tabelle) non viene popolato.... rimane null!!

    ti prego, illuminami!
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  6. #6
    Originariamente inviato da bANART
    ti prego, illuminami!
    Gia' avevo acceso un cerino (alla Madonna) perche' immaginavo fosse una lotta.

    Ti ripeto meno genericamente: NON sperare che i campi si compilino (popolino, si riproducano, figlino, si coitino tra loro) da soli.

    ad un record profile devi abbinare un record user. Dopo di che la foreign key provvedera' ad eseguire una azione di default (che non indichi) sul record associato alla tabella profile.

    Forse sarebbe meglio associare a user un id profile. Ma metti caso che gestisci profili....

    ma tutte quelle opz (forse 0/1) sono proprio necessarie? Ma questo sarebbe un'altro cerino....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    allora credo che ora sia chiaro che sono un novizio
    L'importante è che con quel cerino tu non abbia intenzione di darmi fuoco

    ad un record profile devi abbinare un record user
    e fin quì ci sono. Se mi registro come Pippo e ho la macchina e la moto nella tabella users mi mette Pippo (con username password ecc..) e nella tabella 2 passa a 1 i campi auto e moto... e però dovranno essere associati...

    Dopo di che la foreign key provvedera' ad eseguire una azione di default (che non indichi) sul record associato alla tabella profile.
    Ma la stinga FOREIGN KEY (id_users) REFERENCES users (id) non si traduce in?:
    Nel campo id_users (della tabella profile) copia il contenuto del campo id della tabella users.
    (vado per logica ovviamente non per sintassi esatta (che sempre ovviamente mi pare ovvio che non so)

    Forse sarebbe meglio associare a user un id profile. Ma metti caso che gestisci profili....
    ..come sopra. Ma non è profile che deve prendere i dati da users?

    ma tutte quelle opz (forse 0/1) sono proprio necessarie? Ma questo sarebbe un'altro cerino....
    OMMAMMA!! E MO!? ... ...cosa significa? ...se le opzioni sono tutte diverse con nomi diversi si potrebbe fare in un altro modo?

    (io ho capito che mi ci vuoi far arrivare da solo (e mi piace questo), ma forse sono più capra di quello che t'aspettassi )
    Intanto ti aspetto davanti al monitor!!!!
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  8. #8
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Originariamente inviato da bANART
    Ma la stinga FOREIGN KEY (id_users) REFERENCES users (id) non si traduce in?:
    Nel campo id_users (della tabella profile) copia il contenuto del campo id della tabella users.
    Assolutamente no.

    Serve per dire che in quel campo (quando lo valorizzerai inserendo record in quella tabella) il valore inserito dovra' per forza essere uno di quelli presenti nel campo ID della tabella Users.

    Mica maggicamente te li compila in automatico

  9. #9
    Utente di HTML.it L'avatar di bANART
    Registrato dal
    Jul 2005
    Messaggi
    662
    Ho capito, voi avete deciso di farmi soffrire lentamente...

    piero.mac docet:
    Forse sarebbe meglio associare a user un id profile
    Ma quindi devo aggiungere alla tabella users la stringa:
    id_profile int(11) NOT NULL default '0',
    (???)

    ...famme provà...


    ------

    bhè ovvio che non sarebbe andato, non mi dice niente quel campo messo così!!
    (quanto mi sento lontano dalla soluzione )
    Matteo Coletta - fotografia
    Fotografo Lanciano - Fotografia a Lanciano e Pescara

  10. #10
    Originariamente inviato da bANART
    (quanto mi sento lontano dalla soluzione )


    http://database.html.it/guide/leggi/87/guida-mysql/


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.