PDA

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?

]Rik`[
09-11-2011, 14:59
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

]Rik`[
09-11-2011, 15:33
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.

ConRoe
09-11-2011, 16:10
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

]Rik`[
10-11-2011, 09:21
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: