| Precedente :: Successivo |
| Autore |
Messaggio |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Dom Feb 04, 2007 8:36 pm Oggetto: [MySql] Numero di campi variabili ---> ?? |
|
|
Ho un database MySql, che contiene una tabella "utenti".
Ogni utente ha un certo numero di campi, ma io ho questa necessità:
vorrei fare in modo che un utente possa avere un numero variabile di campi.
In pratica alcuni utenti dovrebbero avere delle informazioni in più, ma non so come fare.
L'ideale sarebbe un vettore di INT, ma da quello che so in MySql non esiste.
C'è un modo per risolvere questo problema o devo creare un'infinità di campi già di partenza?
Grazie. |
|
| Torna in cima |
|
 |
KainOne Nuovo del Forum


Registrato: Jan 31, 2007 Messaggi: 20
|
Inviato: Lun Feb 05, 2007 12:34 am Oggetto: |
|
|
Bravo, questa è una vera domanda, mi piace, dopo tanti forum e tante domande di poco conto, finalmente una domanda seria.
Dunque, caro amico, a me personalmente piace utilizzare una struttura gerarchica relazionale. Tante parole per dire che utilizzo un'apposita tabella per immagazzinare un'alto livello di informazioni non prevedibili.
Propongo un problema d'esempio:
ho una tabella per registrare le informazioni sugli utenti, i campi che prevedo sono i canonici: nome,cognome,titolo,indirizzo,codice fiscale, partita iva, telefono e cellulare. Ma cosa succede se volessi permettere all'utente del programma di inserire 200 numeri di telefono o 500 indirizzi email per un singolo cliente? non posso di certo prevederlo in anticipo, e non è saggio immettere un numero di campi eccessivamente inutili.
soluzione relazionare
creo un'altra tabella chiamata "contatti" e inserisco 3 campi: id_cliente,etichetta e testo.
Ovviamente mi preoccupo di inserire un campo id univoco nella tabella dei "clienti".
In questo modo se al cliente x voglio inserire 20 numeri di telefono è sufficiente inserire l'id del cliente x, l'etichetta (per esempio "casa") e il numero (1234-12345678). In questo modo è possibile inserire un numero elevatissimo di dati senza sprecare spazio. Con il mysql è anche molto semplice, dato che successivamente per recuperare i dati di un singolo cliente basta interrogarlo con la condizione id_cliente=l'id del cliente x.
Conclusione
La struttura relazionale è estremamente utile ed efficace, non implica un grande sforzo di previsione, si risparmia un sacco di spazio dato che le tabelle pesano secondo il contenuto e infine esistono meccanismi automatici (consiglio lo studio del manuale del database scelto per l'operazione). _________________ WotNA Krew |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Lun Feb 05, 2007 4:02 pm Oggetto: |
|
|
Grazie mille, mi sei stato di grande aiuto.
Ho già il campo ID, quindi non mi resta che aggiungere questa tabella. |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Lun Feb 05, 2007 4:49 pm Oggetto: |
|
|
Ancora una domandina, però. Non ho definito nessun indice in questa nuova tabella, devo farlo? Perchè da quello che so velocizzerebbe la ricerca.
Se sì, devo mettere il campo ID come chiave primaria, in pratica? |
|
| Torna in cima |
|
 |
KainOne Nuovo del Forum


Registrato: Jan 31, 2007 Messaggi: 20
|
Inviato: Mar Feb 06, 2007 10:05 am Oggetto: |
|
|
SI. ricorda di mettere sia primaria che univoca e impostala sempre come contatore lineare! _________________ WotNA Krew |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Mar Feb 06, 2007 3:19 pm Oggetto: |
|
|
Aspetta, io intendo nella tabella relazionale.
Cioè, nella tabella degli utenti è ovviamente primaria, ma io intendo nella tabella delle informazioni aggiuntive, dove l'ID può essere anche uguale.
Quindi lì non va univoco, ma volevo sapere se ci và chiave primaria sull'ID. |
|
| Torna in cima |
|
 |
KainOne Nuovo del Forum


Registrato: Jan 31, 2007 Messaggi: 20
|
Inviato: Mar Feb 06, 2007 5:55 pm Oggetto: |
|
|
In realtà nella tabella relazionale il campo ID riferito alla tabella stessa è superfluo, mentre il campo che contiene il link all'ID della tabella principale deve poter accettare duplicati. Dato che molti database richiedono esplicitamente la chiave, nella tabella relazionale, puoi attribuirla al campo id (contatore) se presente.
PS: se invece il database te lo costruisci da solo, per esempio come classe del c++ (cosa che io faccio continuamente) allora il campo id nella tabella relazionale diventa utile per il riordinamento interno. Fortunatamenti i mysql gestisce un campo idx nascosto, con il quale tiene traccia dei record e utilizza per la manutenzione dello stesso datrabase (movimenti, cancellazioni, modifiche,ecc...). _________________ WotNA Krew |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Mar Feb 06, 2007 8:31 pm Oggetto: |
|
|
Bon, in pratica non serve. Appunto perchè ci possono essere più ID uguali.
OK, grazie. |
|
| Torna in cima |
|
 |
KainOne Nuovo del Forum


Registrato: Jan 31, 2007 Messaggi: 20
|
Inviato: Mar Feb 06, 2007 10:24 pm Oggetto: |
|
|
de nada... io adoro fare i database con le classi supergestite e il vecchio TList... lol _________________ WotNA Krew |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Ven Feb 09, 2007 2:52 pm Oggetto: |
|
|
Bene, allora approfitto di te.
Devo contare quante riche ci sono in una tabella.
Allora faccio SELECT COUNT eccetera eccetera.
Il problema è che non mi ritorna un valore, bensì una stringa che dice "Register #numero" o qualcosa del genere.
Devo fare qualche altra query su quel risultato? |
|
| Torna in cima |
|
 |
KainOne Nuovo del Forum


Registrato: Jan 31, 2007 Messaggi: 20
|
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Sab Feb 10, 2007 4:43 pm Oggetto: |
|
|
Sì, scusa, non ho specificato che uso PHP.
Cmq era proprio rows_count(), e non select count. Ecco perchè.
Infatti select count le seleziona, le righe, (ovviamente) invece io devo contarle.
Grazie. |
|
| Torna in cima |
|
 |
SAMInside Frequentatore del Forum


Registrato: Jul 19, 2006 Messaggi: 182 Località: Universo
|
Inviato: Sab Feb 10, 2007 4:46 pm Oggetto: |
|
|
Alla fine era mysql_num_rows().
Se può servire:
$risultato = mysql_query( "SELECT * FROM tabella1", $connessione );
$num_righe = mysql_num_rows( $risultato );
Saluti. |
|
| Torna in cima |
|
 |
|