Consiglio struttura database mysql

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Salve, vorrei qualche consiglio. Devo realizzare un piccolo programma, per la gestione di alcune persone. In pratica devo vedere se una determinata persona ha fatto quello che doveva fare in un range di tempo. Faccio un esempio

http://postimage.org/image/7379y0se9/

Se la persona e attiva ha 5 giorni di tempo per svolgere il suo compito, quindi se pinco e attivo in 20 ha tempo fino alla 25, fin qui non avrei problemi, la cosa si complica perche se sempre la stessa persona e attiva anche in 22 ha tempo fino alla 27 e cosi via. Come devo strutture la cosa secondo voi? :confused:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
se non ho capito male il problema.
potresti fare una tabella delle persone
id_persona
nome_persona
ecc..
con tutti i dati che ti servono
poi fare una tabella periodo_attivita
id
id_persona
inizio
fine (se fine è sempre inizio+5 potresti non metterlo)

per cui nella prima tabella avrai (es.)
1 pinco ....
2 pallo ....
3 sempronio ....
........
nella seconda
1 2 22 27
2 3 21 26
3 2 25 30
.....
dalla seconda ricavi che la persona con id_persona = 2 è attiva dal 22 al 27 e dal 25 al 30
 

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Vediamo se ho capito:

2012_06_06_125501.png


In questo modo però gestisco solo un inizio attività giusto?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
nella tabella dati_anagrafici non devi mettere l'inizio dell'attività, la trovi (le trovi) per un tale id_cliente nella tabella periodo_di_attivita
le due tabelle sono collegate dall id_cliente
nella tabella periodo_di_attivita ho detto che puoi evitare di mettere la fine se la durata è sempre la stessa (es 5 gg) per cui la fine non è altro che
fine= inizio +5
ma se la durata è varia nella tabella devi inserire o la durata o la data di fine.
ti faccio un paio di esempi (poi userai le join se ti trovi meglio)
PHP:
<?php
//durata fissa
$durata =5
$q_cl=mysql_query("SELECT id_cliente FROM anagrafica");
while($r_cl=mysql_fetch_array($q_cl)){
	echo "il cliente id=".$r_cl['id_cliente']." ha le seguenti attività<br />";
	$q_at=mysql_query("SELECT * FROM periodo WHERE id_cliente =".$r_cl['id_cliente']);
	while($r_at=mysql_fetch_array($q_at)){
		$inizio=$r_at['inizio'];
		$fine = $inizio + $durata;
		echo "che iniziano il $inizio e finiscono il $fine<br />";
	}
}
?>
PHP:
<?php
//durata variabile
$q_cl=mysql_query("SELECT id_cliente FROM anagrafica");
while($r_cl=mysql_fetch_array($q_cl)){
	echo "il cliente id=".$r_cl['id_cliente']." ha le seguenti attività<br />";
	$q_at=mysql_query("SELECT * FROM periodo WHERE id_cliente =".$r_cl['id_cliente']);
	while($r_at=mysql_fetch_array($q_at)){
		//se usi data fine e data inizio
		$inizio=$r_at['inizio'];
		$fine = $r_at['fine'];
		echo "che iniziano il $inizio e finiscono il $fine<br />";
		/* se invece della fine usi la durata modifichi in
		$inizio=$r_at['inizio'];
		$fine = $inizio + $r_at['durata'];
		echo "che iniziano il $inizio e finiscono il $fine<br />";
		*/
	}
}
?>
 

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Ciao borgo,

Ok, in questo modo ho quando iniziano e il tempo che ha a disposizione, ma come faccio a capire che in quel periodo è stato attivo?
2012_06_07_132440.png
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
se la durata è 6 giorni (da come mi sembra è sempre la stessa) potresti provare a fare così

tabella anagrafica:
id_cliente int(9) prymarikey autoincrement
nome varchar (250) //e altri dati che ti possono interessare nell'anagrafica

tabella attivita:
id_attivita int(12) prymarikey autoincrement
id_cliente int(9)
inizio int(2)
durata int(1) default 6
a_1 enum('0','1') default 0 // 0 = non attivo, 1 = attivo
a_2 //come sopra
a_3
a_4
a_5
a_6 //come sopra

poi lo script
PHP:
<?php
//dati di connessione
$q_cl=mysql_query("SELECT id_cliente FROM anagrafica");
while($r_cl=mysql_fetch_array($q_cl)){
    echo "il cliente id=".$r_cl['id_cliente']." ha le seguenti attività<br />";
    $id_c=$r_cl['id_cliente'];
	$q_at=mysql_query("SELECT * FROM periodo WHERE id_cliente =".$r_cl['id_cliente']);
    echo "<table>";
	while($r_at=mysql_fetch_array($q_at)){
        $id_at=$r_at['id_attivita'];
		$inizio=$r_at['inizio'];
		$durata=$r_at['durata'];
		$a[0]=$r_at['a_1'];
		$a[1]=$r_at['a_2'];
		$a[2]=$r_at['a_3'];
		$a[3]=$r_at['a_4'];
		$a[4]=$r_at['a_5'];
		$a[5]=$r_at['a_6'];
		$stile="";
		echo "<tr>";
		for($k=0; $k <$durata;$k++){
			$inizio +=$k;
			if($a[$k] == "0"){
				$stile="";
				$inverti="1";
			}elseif($a[$k] == "1"){
				$stile= "style='background-color:#FF0000'";
				$inverti="0";
			}
			$inverti="$id_at|$id_c|$k|$inverti";
			echo "<td $stile>";
			echo "<a href=\"modifica.php?mod=$inverti\">$inizio</a>";
			echo "</td>";
		}
		echo "</tr>";
    }
	echo "</table>";
}
?>
e la pag modifica.php
PHP:
<?php
$modifica=$_GET['mod'];
$dati=explode("|", $modifica);
$d_a=$dati[0];//conterrà l'id dell'attività
$d_c=$dati[1];//conterrà l'id del cliente
$d_gg=$dati[2];//il giorno da modificare
$d_at_na=$dati[3];//il valore di inversione, 1 se era 0 , 0 se era 1
switch($d_gg){
	case "0": $m= " a_1 = $d_at_na ";
	break;
	case "1": $m= " a_2 = $d_at_na ";
	break;
	case "2": $m= " a_3 = $d_at_na ";
	break;
	case "3": $m= " a_4 = $d_at_na ";
	break;
	case "4": $m= " a_5 = $d_at_na ";
	break;
	case "5": $m= " a_6 = $d_at_na ";
	break;
	default: $m=0;
	break;
}
if($m==0){
	echo "qualcosa è andato storto";
	echo "<meta http-equiv='Refresh' content='3; URL=alla_pag_precedente.php'>";
}else{
	$query = "UPDATE attivita SET $m WHERE id_attivita = $d_a AND id_cliente = $d_c";
	$ris=mysql_query($query);// or die....
	echo "<meta http-equiv='Refresh' content='0; URL=alla_pag_precedente.php'>";
}
?>
lo scrip "dovrebbe" funzionare in questo modo
la prima pagina ti presenta per ogni cliente (e per ogno sua attività) 6 caselle col il numero del giorno (es 22, 23, 24, 25, 26, 27)
cioè dall'inizio alla fine attività
se (es) il giorno 23 è attivo la cella ha un bck rosso
se vuoi modificare l'attività basta che tu clicci sul numero del giorno
es clicchi sul 24 in cui non era attivo:
si uppa la tabella attivita (per quell'attività e per quel cliente) portando il valore 0 a uno
quando torni alla pag iniziale il giorno 24 avrà il bck rosso
al contrario es. il giorno 23 era attivo e ci clicchi sopra
si uppa la tabella attivita (per quell'attività e per quel cliente) portando il valore uno a 0
tornando alla pag iniziale il bck del giorno 23 non sarà piu rosso

guarda che è un'idea che ho buttato giu , non l'ho testata quindi non è detto che funzi, o per errori di logica (grave) o perchè ho sbagliato qualche copy/paste ...
 

Bivio

Utente Attivo
19 Mag 2010
91
0
6
Grazie mille Borgo, adesso sto riuscendo a capire. Sistemando un po il tuo script sono riuscito a farlo funzionare, e diciamo che e una buona base di partenza. Adesso cerco di adattarlo meglio alle mie esigenze. La mia difficoltà era nel capire come strutturare la cosa, ora che ho una base dovrebbe risultare facile proseguire.

Grazie ancora per la disponibilità. :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
N Consiglio struttura database WFM Database 1
G Consiglio per struttura Categorie PHP 2
G Consiglio su piattaforma forum da utilizzare CMS (Content Management System) 0
A Consiglio per creazione sito web CMS (Content Management System) 0
C [Diagramma E/R] Consiglio su progetto Database 0
sbolde91 Consiglio gestione Hosting Hosting 2
B Richiesta Consiglio E-commerce CMS (Content Management System) 0
A consiglio su telecamere ip wi-fi Presentati al Forum 0
S Consiglio esercizio Javascript Javascript 2
M Consiglio sulla gestione di Gerarchie Database 0
L Consiglio SEO gestione dominio + free hosting SEO e Posizionamento 3
M [DIAGRAMMA ER] Consiglio su progetto Presentati al Forum 1
R Consiglio Hosting per e-commerce Hosting 7
L Ciao, chiedo consiglio Presentati al Forum 1
Web93 RICHIESTA CONSIGLIO - FARE UN SITO WEB CMS (Content Management System) 1
F Consiglio IP camera per timelapse (anche notturno) IP Cam e Videosorveglianza 0
M [PHP] Consiglio su come istanziare un Bottone PHP 0
S [PHP] Richiesta consiglio PHP 1
M Consiglio su problematica impianto videosorveglianza IP Cam e Videosorveglianza 4
M [HTML] consiglio su label e checkbox riguardo l'allineamento HTML e CSS 2
D consiglio evitare truffe Annunci servizi di Social Media Marketing 11
A [Visual Basic] Consiglio sul datagridview Visual Basic 0
G [Diagramma ER] Consiglio su progetto Database 0
G consiglio acquisto telecamera nascosta in sensore allarme IP Cam e Videosorveglianza 0
Q consiglio per python Programmazione 1
C Consiglio configurazione IPCam on line su pagina web IP Cam e Videosorveglianza 2
A Consiglio hosting offshore?? Hosting 3
L Wordpress: consiglio plugin per "verifica disponibilità" WordPress 0
S Consiglio Gestionale/ERP su commessa Windows e Software 0
A Richiesta consiglio per kit videosorveglianza IP Cam e Videosorveglianza 0
D [Photoshop] Consiglio acquisto tavoletta grafica de xp-pen Photoshop 0
R Consiglio rete cablata Reti LAN e Wireless 4
D Consiglio per rete ufficio Reti LAN e Wireless 0
W [CMS] Un consiglio per il CMS più adatto a me CMS (Content Management System) 2
E Consiglio sistema di videosorveglianza IP Cam e Videosorveglianza 0
D [HTML] Consiglio su sito Joomla Joomla 6
M [MS Access] consiglio sviluppo query MS Access 1
D Consiglio su come impostare IP statico Reti LAN e Wireless 0
G [PHP] Consiglio su Qry/array PHP 3
M Consiglio su creazione rete Reti LAN e Wireless 0
trattorino Consiglio e parere Annunci servizi di Social Media Marketing 4
Ibernato Consiglio host Hosting 7
M consiglio sistema di videosorveglianza IP Cam e Videosorveglianza 1
andreas88 Consiglio valore in euro di un Notebook usato Discussioni Varie 3
G consiglio telecamere per esterno IP Cam e Videosorveglianza 4
W Consiglio su gestione di un form con XMLHttpRequest Ajax 0
E Consiglio telecamera wifi motorizzata esterno con power bank IP Cam e Videosorveglianza 5
felino TV Box Android: consiglio su quale acquistare Discussioni Varie 0
A Ciao a tutti, volevo chiedervi un consiglio riguardo l'errore che viene fuori quando tento di lancia Presentati al Forum 1
S Consiglio telecamere v.sorveglianza IP Cam e Videosorveglianza 1

Discussioni simili