Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Mysql] Correlare utente con l'articolo scritto

    vorre fare in modo che si possa vedere l'utente che ha scritto un determinato articolo.
    ho due tabella:
    codice:
    mysql> desc articoli2;
    +-----------+-------------+------+-----+---------+----------------+
    | Field     | Type        | Null | Key | Default | Extra          |
    +-----------+-------------+------+-----+---------+----------------+
    | id        | int(11)     | NO   | PRI | NULL    | auto_increment |
    | title     | varchar(20) | NO   |     | NULL    |                |
    | sectionid | varchar(20) | NO   |     | NULL    |                |
    | testo     | text        | NO   |     | NULL    |                |
    | data      | datetime    | NO   |     | NULL    |                |
    | datamod   | datetime    | YES  |     | NULL    |                |
    +-----------+-------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    codice:
    mysql> desc utenti;
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | nome     | varchar(20) | NO   |     | NULL    |       |
    | password | varchar(20) | NO   |     | NULL    |       |
    | email    | varchar(30) | NO   |     | NULL    |       |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    penso si tratti di foreign key, ma nn saprei come implementarla.
    potreste darmi una mano??

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Aggiungi un campo contatore alla tabella utenti e in quella degli articoli inserisci il relativo id dell'autore. In questo modo ti basta una banale inner join per recuperare tutti i dati dello stesso.

  3. #3
    sulle inner join sono ancora più negato.
    allora il campo contatore (id) lo devo creare auto_increment e PK?

    poi la query potrebbe essere questa:
    SELECT * FROM articoli2 INNER JOIN utenti ON articoli2.id = utenti.id
    ???

    questo mi darebbe come risultato chi ha scritto un determinato articolo giusto?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Nella tabella articoli riporti l'id dell'autore (es. id_autore) e la query diventa

    SELECT a.*,u.nome FROM articoli2 as a INNER JOIN utenti as u ON a.id_autore = utenti.id

    la chiave primaria nella tabella utenti la crei così come hai fatto nella tabella articoli.

  5. #5
    scusa ancora una cosa: cosa intendi con riportare in articoli l'id degli utenti?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    tabella utenti
    id
    nome
    password
    email

    tabella articoli
    tutti i tuoi campi
    id_utente

  7. #7
    Si ho capitp che devo aggiungere un campo id_utente.
    Quello che nn ho capito è:
    -deve essere auto_increment?
    -not null?
    -e soprattutto come lo riempio?

  8. #8
    sono messo così:
    codice:
    desc articoli2;
    +-----------+-------------+------+-----+---------+----------------+
    | Field     | Type        | Null | Key | Default | Extra          |
    +-----------+-------------+------+-----+---------+----------------+
    | id        | int(11)     | NO   | PRI | NULL    | auto_increment |
    | title     | varchar(20) | NO   |     | NULL    |                |
    | sectionid | varchar(10) | NO   |     | NULL    |                |
    | testo     | text        | NO   |     | NULL    |                |
    | data      | datetime    | NO   |     | NULL    |                |
    | datamod   | datetime    | YES  |     | NULL    |                |
    | id_utente | int(11)     | NO   | MUL | NULL    |                |
    +-----------+-------------+------+-----+---------+----------------+
    7 rows in set (0.00 sec)
    
    desc utenti;
    +-----------+-------------+------+-----+---------+----------------+
    | Field     | Type        | Null | Key | Default | Extra          |
    +-----------+-------------+------+-----+---------+----------------+
    | id_utente | int(11)     | NO   | PRI | NULL    | auto_increment |
    | nome      | varchar(20) | NO   |     | NULL    |                |
    | password  | varchar(20) | NO   |     | NULL    |                |
    | email     | varchar(30) | NO   |     | NULL    |                |
    +-----------+-------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    la tabella articoli l'ho creata così::
    codice:
    create table articoli2 ( 
    id int auto_increment primary key, 
    title varchar(20) not null, 
    sectionid varchar(10) not null, testo text not null, 
    data datetime not null, 
    datamod datetime, 
    id_utente int not null, 
    foreign key (id_utente) references utenti(id_utente) on delete cascade on update cascade) type=InnoDB;
    il problema è che in articoli esiste già una colonna auto_increment e quando provo ad inserire un articolo mi da questo errore:
    codice:
    Cannot add or update a child row: a foreign key constraint fails (`articoli`.`articoli2`, CONSTRAINT `articoli2_ibfk_1` FOREIGN KEY (`id_utente`) REFERENCES `utenti` (`id_utente`) ON DELETE CASCADE ON UPDATE CASCADE)
    come posso risolvere??

  9. #9
    sono messo così:
    [code]mysql> desc articoli2;+-----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |
    +-----------+-------------+------+-----+---------+----------------+
    | id | int(11) | NO | PRI | NULL | auto_increment |
    | title | varchar(20) | NO | | NULL | |
    | sectionid | varchar(10) | NO | | NULL | |
    | testo | text | NO | | NULL | |
    | data | datetime | NO | | NULL | |
    | datamod | datetime | YES | | NULL | |
    | id_utente | int(11) | NO | MUL | NULL | |
    +-----------+--------

  10. #10
    allora la tabella utenti è questa:
    codice:
    mysql> desc utenti;
    +----------+-------------+------+-----+---------+----------------+
    | Field    | Type        | Null | Key | Default | Extra          |
    +----------+-------------+------+-----+---------+----------------+
    | id       | int(11)     | NO   | PRI | NULL    | auto_increment |
    | nome     | varchar(20) | NO   | MUL | NULL    |                |
    | password | varchar(20) | NO   |     | NULL    |                |
    | email    | varchar(20) | NO   |     | NULL    |                |
    +----------+-------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    nome è indice.
    ho creato la tabella articoli così:
    ho fatto così.
    ho reso indice il campo utenti.nome e ho creato la tabella articoli in questo modo:
    codice:
    create table articoli (
    id int auto_increment not null primary key,
    title varchar(20) not null,
    sectionid varchar(10) not null,
    testo text not null,
    data datetime not null,
    datamod datetime,
    utente varchar(20) not null,
    foreign key (utente) references utenti(nome) on delete cascade on update cascade)
    engine=InnoDB;
    adesso mi da errore quando provo a inserire un articolo dalla pagina in php:
    codice:
    Cannot add or update a child row: a foreign key constraint fails  (`prova_articoli`.`articoli`, CONSTRAINT `articoli_ibfk_1` FOREIGN KEY  (`utente`) REFERENCES `utenti` (`nome`) ON DELETE CASCADE ON UPDATE  CASCADE)
    nn penso dipenda da php però.
    nn so più dove andare a parare.

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.