View Full Version : [SQL] Programma gestione turni
bouncey2k
09-11-2011, 14:07
Salve, sto facendo un programma gestionale in PHP per gestire dei turni. Ho due tabelle così formate:
- tabella "personale": tessera | cognome | nome
- tabella "turni": data | orario | persona1 | persona2 | persona3
In PHP devo visualizzare la tabella "turni" riferita ad un dato giorno (WHERE data = aaaa-mm-gg) però vorrei fare in modo di poter visualizzare cognome e nome al posto della tessera, quindi collegare in qualche modo le due tabelle. Ho provato con una join ma senza risultati. La mia query è la seguente:
SELECT * FROM turni, personale WHERE turni.persona1 = personale.tessera
Se dopo la select cerco di visualizzare i cognomi (richiamandoli dalla tabella "personale") ovviamente mi visualizza solo quelli riferiti a persona1, però io ho bisogno di visualizzarli uno accanto all'altro in una tabella. Come posso fare?
secondo me hai impostato male il db, per come hai fatto te, fai conto, se un giorno ti servisse di avere un turno per 4 o 5 persone come faresti?
secondo me la tabella dei turni dovrebbe essere
data-orario-tessera
e replicare la riga X volte, quante sono le persone che hanno il turno
bouncey2k
09-11-2011, 15:07
Rik`[;36317207']secondo me hai impostato male il db, per come hai fatto te, fai conto, se un giorno ti servisse di avere un turno per 4 o 5 persone come faresti?
secondo me la tabella dei turni dovrebbe essere
data-orario-tessera
e replicare la riga X volte, quante sono le persone che hanno il turno
In realtà nel campo persona1, persona2, persona3 ci stanno i numeri di tessera..
questo è il mio schema:
tabella turni
data | orario | persona1 | persona2 | persona 3
2011-11-01 | 08.00-09.00 | 102 | 103 | 104
2011-11-01 | 09.00-10.00 | 125 | 143 | 112
2011-11-01 | 10.00-11.00 | 135 | 106 | 102
2011-11-01 | 11.00-12.00 | 124 | 165 | 176
I numeri riferiti alle persone sono dei numeri di tessera
tabella personale
tessera | cognome | nome
102 | rossi | mario
103 | bianchi | francesco
104 | verdi | giuseppe
Io vorrei visualizzare la tabella TURNI visualizzando al posto delle tessere i relativi cognomi
sìsì ho capito il tuo problema, ti stavo ponendo un altro quesito :D
in ogni caso possibile e immaginabile hai 3 persone per ogni turno? non capita mai che siano 1 o 2, o magari 4 o più?
bouncey2k
09-11-2011, 15:38
Rik`[;36317453']sìsì ho capito il tuo problema, ti stavo ponendo un altro quesito :D
in ogni caso possibile e immaginabile hai 3 persone per ogni turno? non capita mai che siano 1 o 2, o magari 4 o più?
No, sono per forza di cose 4 persone per ogni turno :muro:
Devo capire se sia fattibile o meno in MySQL (mi parebbe strano non fosse possibile) ed in tal caso cercare un'alternativa.
Ho pensato ad una VIEW ma penso abbia gli stessi problemi.
la butto li...
$turni = mysql_query("SELECT * FROM turni WHERE data = aaaa-mm-gg");
while($row = mysql_fetch_array($turni)) {
/*stampo la tabella normalmente e quando arrivo al punto "incriminato"...*/
$persona = mysql_query("SELECT cognome, nome FROM personale WHERE tessera = '$row['tessera']'");
while($row = mysql_fetch_array($persona)) {
echo"$row['cognome'] $row['nome']";
}
}
...certo che è brutta forte... :fagiano:
bouncey2k
09-11-2011, 16:29
la butto li...
$turni = mysql_query("SELECT * FROM turni WHERE data = aaaa-mm-gg");
while($row = mysql_fetch_array($turni)) {
/*stampo la tabella normalmente e quando arrivo al punto "incriminato"...*/
$persona = mysql_query("SELECT cognome, nome FROM personale WHERE tessera = '$row['tessera']'");
while($row = mysql_fetch_array($persona)) {
echo"$row['cognome'] $row['nome']";
}
}
...certo che è brutta forte... :fagiano:
Cercavo qualcosa di più semplice, però diamine funziona! :sofico:
starfred
10-11-2011, 08:59
select T.data, T.orario, nome1.cognome as Persona1,nome2.cognome as Persona2,nome3.cognome as Persona3
from turni as T, (select *from personale) as nome1, (select *from personale) as nome2, (select *from personale) as nome3
where T.persona1=nome1.tessera and
T.persona2=nome2.tessera and
T.persona3=nome3.tessera
select T.data, T.orario, nome1.cognome as Persona1,nome2.cognome as Persona2,nome3.cognome as Persona3
from turni as T, (select *from personale) as nome1, (select *from personale) as nome2, (select *from personale) as nome3
where T.persona1=nome1.tessera and
T.persona2=nome2.tessera and
T.persona3=nome3.tessera
:cool:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.