agenda appuntamenti php/mysql

smartgyverblog

Nuovo Utente
9 Apr 2010
9
0
0
www.smartgyverblog.it
raga innanzittuto ciao a tutti..ho il seguente problema: premetto che è da un pò che non metto mani su mysql e php e sono un pò arrugginito.

Malgrado questo,ho realizzato il seguente database in allegato con le varie relazioni per un mio cliente(nello specifico un centro estetico) che non è altro che una agenda elettronica.

Praticamente quando un cliente prende un appuntamento l'orario X per determinati trattamenti non deve essere selezionabile nel menu a tendina da un altro cliente.

ES: prenoto il servizio X che dura 90 minuti alle 10:30,il prossimo che prenota NON DEVE visualizzare l'orario in questione per tutta la durata del trattamento(quindi dalle le 10:30,le 11:00,le 11:30 non saranno presenti nel menu a tendina).

inoltre la tabella APPUNTAMENTO di relazione intermedia ha i campi inizio e fine che hanno rispettivamente VARCHAR(10),e contengono proprio le stringhe con questo format XX:00 (es:10:00)

Che campi mi consigliate di utilizzare? Esistono funzioni che potrebbero di mysql che potrebbero aiutarmi? Come faccio a fare una query che non mi restituise gli orari in questione? Stavo pensando ad un left job,che ne pensate?
 

Allegati

  • db.jpg
    db.jpg
    23,2 KB · Visite: 862
ciao
se non ho capito male il tuo problema potresti fare in questo modo
PHP:
<?php
$orario=array("00:00","00:30","23:30");//+ tutte le ore che mancano e/o che ti servono
$inizio=array();
$fine=array();
//vari $_POST o $_GET di scelta dell'utente
//poi fai la select della tabella appuntamenti
$query_str="SELECT * FROM appuntamento WHERE id_trattamento=$id_tratt_scelto";
$result=mysql_query($query_str));
//estrai per quel servizio gli orari occupati , immagino che ad ogni inizio corrisponda sempre una fine
while($riga=mysql_fetch_array($result)){
	$inizio[]=$riga['inizio'];
	$fine[]=$riga['fine'];
}
$numero_occupati=0;
$numero_occupati=count($inizio);
//prepari il menu a tendina non ho messo il tag form
echo "<select name=\"scelta orario\">";
//cicli l'array dell'orario
foreach($orario as $ora){
	//metto un flag a 0
	$flag=0;
	//cicli gli orari
		for($k=0; $k<=$numero_occupati;$k++){
			//verifico se $ora è compreso o se non ci sono orari occupati
			if($ora >= $inizio[$k] && $ora <= $fine[$k] && $numero_occupati!=0){
				$flag=1;
			}
		}//fine for
	if($flag==0){//se $ora non è compreso stampo
		echo "<option value=\"".$ora."\">$ora</option>";
	}
}//fine while
echo "</select>";
?>
guarda però che è solo un'idea e non so se funzi
 
ciao
se non ho capito male il tuo problema potresti fare in questo modo
PHP:
<?php
$orario=array("00:00","00:30","23:30");//+ tutte le ore che mancano e/o che ti servono
$inizio=array();
$fine=array();
//vari $_POST o $_GET di scelta dell'utente
//poi fai la select della tabella appuntamenti
$query_str="SELECT * FROM appuntamento WHERE id_trattamento=$id_tratt_scelto";
$result=mysql_query($query_str));
//estrai per quel servizio gli orari occupati , immagino che ad ogni inizio corrisponda sempre una fine
while($riga=mysql_fetch_array($result)){
	$inizio[]=$riga['inizio'];
	$fine[]=$riga['fine'];
}
$numero_occupati=0;
$numero_occupati=count($inizio);
//prepari il menu a tendina non ho messo il tag form
echo "<select name=\"scelta orario\">";
//cicli l'array dell'orario
foreach($orario as $ora){
	//metto un flag a 0
	$flag=0;
	//cicli gli orari
		for($k=0; $k<=$numero_occupati;$k++){
			//verifico se $ora è compreso o se non ci sono orari occupati
			if($ora >= $inizio[$k] && $ora <= $fine[$k] && $numero_occupati!=0){
				$flag=1;
			}
		}//fine for
	if($flag==0){//se $ora non è compreso stampo
		echo "<option value=\"".$ora."\">$ora</option>";
	}
}//fine while
echo "</select>";
?>
guarda però che è solo un'idea e non so se funzi


ti ringrazio tantissimo per lo spunto visto che è molto interessante..adesso lo provo e vediamo un pò come va.

Il controllo tuttavia dovrei eseguirlo sulla tabella di tipo appuntamenti che è molti a molti legata con clienti e trattamenti.

Vediam oche ne esce e posto il codice per usi futuri.

Grazie ancora!
 
1242 - Subquery returns more than 1 row

ragazzi c'è l'ho fatta: sono riuscito a crearla. Il problema è un altro: ho modificato i campi appuntamenti e li ho messi in formato TIME sia inizio che fine. Adesso però insorge un problema.

Tramite questa query:

select DATE_FORMAT(fine,'%H:%i') - (select DATE_FORMAT(inizio,'%H:%i') from appuntamento) AS calcolo from appuntamento where data = '2010-12-18'

sono riuscito a farmi restituire la differenza tra l'inizio e la fine del trattamento(nel caso sia ad esempio le 10:00:00 per il primo e le 12:00:00 per le altre mi restituisce 2). Tuttavia se i record sono più di uno mi restituisce il seguente errore:

#1242 - Subquery returns more than 1 row

come faccio dunque a farmi restuire due colonne con le rispettive differenze di orario?. ES: 10:00 - 12:00 : 2 altro record 14:00 17:00 : 3.

N.B: ho cercato una funzione per fare automaticamente calcoli con gli orari ma non ne ho trovati sulla guida di mysql. Ne esistono o no?
 
mi autorispondo così:

select DATE_FORMAT(fine,'%H:%i') AS fine,Date_FORMAT(inizio,'%H%:%i') AS inizio,TIME_FORMAT(TIMEDIFF(fine,inizio),'%k') AS differenza from appuntamento where data = "2010-12-18"
 

Discussioni simili