Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [MySQL] relazione tra due tabelle

    Salve,
    ho due tabelle fatte in questo modo:
    create table studente(
    matricola int(8) not null auto_increment,
    nome varchar(20) not null,
    cognome varchar(20) not null,
    indirizzo varchar(255) not null,
    citta varchar(50) not null,
    primary key(matricola) );
    Create table esame(
    id int(8) not null auto_increment,
    codice varchar(20) not null,
    nome varchar(20) not null,
    sessione enum('primo','secondo','terzo') not null,
    appello enum('1','2') not null,
    data date not null,
    primary key(codice) );

    Vorrei avere una relazione "iscrizione" come segue:

    matricola(studente) <---->id(esame).....in altre parole vorrei che un studente si possa iscrivere ad uno o piu' esami......come posso fare? Come sarà fatta la mia tabella "iscrizione"???

    Grazie in anticipo

  2. #2
    Devi avere un campo in comune tra le due tabelle, cosa che hai già.
    Grazie a quello componi la query inserendo una JOIN tra quei due campi delle due tabelle.
    Ce l'ho fatta! - ItalianPixel -

  3. #3

    Re: [MySQL] relazione tra due tabelle

    Originariamente inviato da coocooche
    Salve,
    ho due tabelle fatte in questo modo:
    Vorrei avere una relazione "iscrizione" come segue:

    matricola(studente) <---->id(esame).....in altre parole vorrei che un studente si possa iscrivere ad uno o piu' esami......come posso fare? Come sarà fatta la mia tabella "iscrizione"???

    Grazie in anticipo
    Per prima cosa la PRIMARY KEY della seconda tabella non puo'
    essere (codice) , ma deve essere id. La chiave primaria è sempre
    di tipo au.
    Se provi a creare due colonne, con phpmyadmin
    (id) auto increment
    (cod) PRIMARY
    ti da errore e ti dice:
    #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key.

    Per legare le due tabelle, crea nella seconda un campo numerico() "matricola" che verrà associato al "matricola" AU della prima.

    Quando farai una "SELECT * FROM studente s LEFT JOIN esame e WHERE s.matricola=e.matricola" avrai il nome della matricola che ti interessa con tutti gli esami ai quali si è iscritto ( perchè ti verranno restituiti tutti gli esami associati all'id matricola)

    Ciao
    Ed

  4. #4
    Ho sbagliato a scrivere. La chiave primaria di "esame" è ovviamente la 'id'.
    Create table esame(
    id int(8) not null auto_increment,
    codice varchar(20) not null,
    nome varchar(20) not null,
    sessione enum('primo','secondo','terzo') not null,
    appello enum('1','2') not null,
    data date not null,
    primary key(id)
    );
    Ora quello che vorrei è proprio una tabella a parte che mi tiene le iscrizioni degli studenti a determinati esami.
    Cioe' vorrei avere:
    matricola-->id
    123-->3 (lo studente con la matricola=123 è iscritto all'esame con id=3)
    123-->5 (lo studente con la matricola=123 è iscritto all'esame con id=5)
    ecc....

    Quindi mi viene in mente una tabella nuova che deve tener questi dati con due campi delle tabelle esistenti. Come si fa? Sto studiando le FOREIGN KEYS...ma non so ancora se c'entrano qualcosa....

  5. #5
    Devi creare una terza tabella (che è meglio per me di un array con l'id dell'esame in un campo della tabella dello studente) con un campo id prenotazione, l'id_matricola e l'id_esame.
    Quando uno studente si iscrive, prendi la matricola dello studente, l'id dell'esame e mandi tutto a una pagina che aggiunge un record alla tabella prenotazioni inserendo matricola e id_esame.
    Quando vai a richiamare le prenotazioni, puoi scegliere se vedere tutti quelli che si sono iscritti a quell'esame o, viceversa, vedere tutti gli esami al quale uno studente si è iscritto.
    Trovo sia più intuitivo e rapido questo metodo.
    L'altro è fattibile ma non mi fido mai troppo degli array.
    Ricapitolando:
    Tabella prenotazioni:
    1.id_prenotazioni
    2.matricola
    3.id_esame
    Poi richiami nelle query quello che vuoi:
    1.SELECT * FROM prenotazioni WHERE matricola='cookie o GET-POST che vuoi'
    per vedere tutti gli esami prenotati dallo studente x
    2.SELECT * FROM prenotazioni WHERE id_esame='cookie o GET-POST che vuoi'
    per vedere chi si è iscritto a quell'esame
    Ce l'ho fatta! - ItalianPixel -

  6. #6
    Ho opzionato per l'idea di portapipe creando una terza tabella 'prenotazioni' con 3 campi: id_prenotazioni, matricola e id_esame!! E infine giocarci con quest'ultima.
    Un ultima domanda: vorrei avere l'elenco, ordinato per data di tutti gli esami a cui uno studente risulta essere iscritto...come faccio con una query soltanto? (devo creare un metodo java....quindi come parametro devo passarli il numero di matricola dello studente).

    Logicamente parlando dovrei andare su prenotazioni, scegliere le row con la matricola corrispondente,a questa matricola corrisponderanno le id degli esami a cui questa matricola e' prenotata e poi tramite queste due informazioni (matricola(solo una) e id_esame(1 o più) ) ricavo il nome, cognome dalla tabella 'studente' e nome esame, data dalla tabella 'esame'...infine faro' un order!!!!

  7. #7
    Ti sei risposto da solo!
    Fai due query per tirarti fuori i nomi dello studente e dell'esame e li usi per una terza query.
    In teoria, da programmatore ordinato, dovrei dirti di usare le JOIN nella query, così da fare una query sola ed estrapolare tutti i dati in una volta.
    Così se selezioni nome_esame, ti viene fuori l'esame dell'id della prenotazione.
    Poi fai come credi.
    Personalmente preferisco allungare il brodo e fare più query.
    Mi sento più sicuro in caso di cambiamenti futuri.
    Rimane il fatto che con una JOIN vai molto più rapido.
    Scegli tu. PHP è bello perché offre più strade per un solo obiettivo!
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Grazie della risposta,
    il fatto è che non sto lavorando con php ma bensi con java. E non dovrei fare niente di complicato. Mi serve solo un unica query per tirare le info desiderate tramite il numero della matricola. Certo se avessi un po' di più di esperienza su mysql vado a vedere precisamente come posso fare con JOIN visto che quello che mi interessa e' un UNICA QUERY!

  9. #9
    A te non cambia nulla sai?
    Che ne fai una o tre non ti cambia.
    E' un modo differente di fare le cose ma il risultato è lo stesso.
    Ce l'ho fatta! - ItalianPixel -

  10. #10
    per adesso sto orientato verso un unica query se è possibile. Anche perche nella logica che sto seguendo, nel codice java non posso fare più di una esecuzione query. Come posso fare con una sola query?

    Con diverse query ho;
    1) select * from prenotazioni where matricola=1; (le prenotazioni della matricola 1 ma non è che mi serve tanto)
    2) select prenotazioni.id_esame from prenotazioni where matricola=1; (gli esami della matricola 1 (es 3 valori: 2, 4 e 5))
    3) select studente.nome,studente.cognome,esame.nome,esame.da ta from studente, esame where studente.matricola=1 and esame.id=2,esame.id=4,esame.id=5;

    come posso avere solo una di query?

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