Logo by Irenicus lunedì 06-feb-12 10:16


RaulKen.It :: Leggi il Topic - [MySql] Numero di campi variabili ---> ??
 FAQFAQ   CercaCerca   Gruppi utentiGruppi utenti   ProfiloProfilo   Messaggi PrivatiMessaggi Privati   LoginLogin 

[MySql] Numero di campi variabili ---> ??

 
Nuovo Topic   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Dom Feb 04, 2007 8:36 pm    Oggetto: [MySql] Numero di campi variabili ---> ?? Rispondi citando

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
Profilo Messaggio privato
KainOne
Nuovo del Forum
Nuovo del Forum


Registrato: Jan 31, 2007
Messaggi: 20

MessaggioInviato: Lun Feb 05, 2007 12:34 am    Oggetto: Rispondi citando

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
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Lun Feb 05, 2007 4:02 pm    Oggetto: Rispondi citando

Grazie mille, mi sei stato di grande aiuto.
Ho già il campo ID, quindi non mi resta che aggiungere questa tabella.
Torna in cima
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Lun Feb 05, 2007 4:49 pm    Oggetto: Rispondi citando

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
Profilo Messaggio privato
KainOne
Nuovo del Forum
Nuovo del Forum


Registrato: Jan 31, 2007
Messaggi: 20

MessaggioInviato: Mar Feb 06, 2007 10:05 am    Oggetto: Rispondi citando

SI. ricorda di mettere sia primaria che univoca e impostala sempre come contatore lineare!
_________________
WotNA Krew
Torna in cima
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Mar Feb 06, 2007 3:19 pm    Oggetto: Rispondi citando

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
Profilo Messaggio privato
KainOne
Nuovo del Forum
Nuovo del Forum


Registrato: Jan 31, 2007
Messaggi: 20

MessaggioInviato: Mar Feb 06, 2007 5:55 pm    Oggetto: Rispondi citando

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
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Mar Feb 06, 2007 8:31 pm    Oggetto: Rispondi citando

Bon, in pratica non serve. Appunto perchè ci possono essere più ID uguali.
OK, grazie.
Torna in cima
Profilo Messaggio privato
KainOne
Nuovo del Forum
Nuovo del Forum


Registrato: Jan 31, 2007
Messaggi: 20

MessaggioInviato: Mar Feb 06, 2007 10:24 pm    Oggetto: Rispondi citando

de nada... io adoro fare i database con le classi supergestite e il vecchio TList... lol
_________________
WotNA Krew
Torna in cima
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Ven Feb 09, 2007 2:52 pm    Oggetto: Rispondi citando

Bene, allora approfitto di te. Gioia
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
Profilo Messaggio privato
KainOne
Nuovo del Forum
Nuovo del Forum


Registrato: Jan 31, 2007
Messaggi: 20

MessaggioInviato: Ven Feb 09, 2007 4:24 pm    Oggetto: Rispondi citando

Personalmente non uso mai un db senza accompagnarlo da un software di controllo.... quindi se usi qualche linguaggio dovresti consultare la guida dello stesso, oppure andare su www.mysql.com.

per la versione 5 consilio: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html

se usi il php:
www.php.net (cerca mysql function e trovera rows_count())

se usi il c++ sparati sulla guida del mysql++ che trovi sempre su www.mysql.com
_________________
WotNA Krew
Torna in cima
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Sab Feb 10, 2007 4:43 pm    Oggetto: Rispondi citando

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
Profilo Messaggio privato
SAMInside
Frequentatore del Forum
Frequentatore del Forum


Registrato: Jul 19, 2006
Messaggi: 182
Località: Universo

MessaggioInviato: Sab Feb 10, 2007 4:46 pm    Oggetto: Rispondi citando

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
Profilo Messaggio privato
Mostra prima i messaggi di:   
Nuovo Topic   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi Topic in questo forum
Non puoi rispondere ai Topic in questo forum
Non puoi modificare i tuoi messaggi in questo forum
Non puoi cancellare i tuoi messaggi in questo forum
Non puoi votare nei sondaggi in questo forum

Powered by phpBB © 2001, 2005 phpBB Group


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Generazione pagina: 0.20 Secondi