PDA

View Full Version : [sql] query


DarkSiDE
05-02-2004, 17:23
ho un db che contiene l'elenco degli studenti di un istituto, con una struttura di questo genere:

nome cognome classe


dovrei interrogare il db in modo che mi restituisca come titolo il nome della classe e l'elenco degli studenti, per tutte le classi del db:

III A
- pippo
- pluto

II B
- topolino
- cionci

io avevo pensato di mettere query in un ciclo, per ogni classe mi faccio restituire tutti gli alunni, idee migliori?

Icedguardian
05-02-2004, 18:11
Non so dove devi usarlo ma se puoi fare un ciclo allora ti fai restituire tutte le info ordinate per classe, appena nel ciclo ti accorgi che la classe è cambiata stampi un nuovo titolo.

Ciao

matpez
05-02-2004, 18:18
Divi fare una query mettendo poi GROUP BY Classe (se si chiama così il campo)! :)

DarkSiDE
05-02-2004, 19:28
Originariamente inviato da matpez
Divi fare una query mettendo poi GROUP BY Classe (se si chiama così il campo)! :)

SELECT *
FROM `studenti` group by classe

ricordavo bene che c'era un modo più "semplice"..
il prob è che così mi restituisce solo un elemento per ogni classe
:confused:

cionci
06-02-2004, 08:08
SELECT * FROM Studenti ORDER BY classe, cognome, nome;

Basta una sola query senza ciclo (a parte il ciclo per scorrere il recordset)....

Semplicemente per riconsocere che hai già scritto tutti gli studenti di quella classe scrivi:

$query = "SELECT * FROM Studenti ORDER BY classe, congnome, nome;";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result)
$prec = "";
while ($row = mysql_fetch_assoc($result))
{
if($prec != $row["classe"])
{
echo "<strong>".$row["classe"]."</strong><br>";
$prec = $row["classe"];
}
echo $row["cognome"]." ".$row["nome"]."<br>";
}
mysql_free_result($result);

Grazie per la citazione ;)

DarkSiDE
06-02-2004, 10:26
Originariamente inviato da cionci
SELECT * FROM Studenti ORDER BY classe, cognome, nome;

Basta una sola query senza ciclo (a parte il ciclo per scorrere il recordset)....

Semplicemente per riconsocere che hai già scritto tutti gli studenti di quella classe scrivi:

$query = "SELECT * FROM Studenti ORDER BY classe, congnome, nome;";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result)
$prec = "";
while ($row = mysql_fetch_assoc($result))
{
if($prec != $row["classe"])
{
echo "<strong>".$row["classe"]."</strong><br>";
$prec = $row["classe"];
}
echo $row["cognome"]." ".$row["nome"]."<br>";
}
mysql_free_result($result);

Grazie per la citazione ;)

l'anno scorso me la cavavo discretamente conl'sql, ora mi trovo ridotto a fare domande di questo genere..vabbè :rolleyes:
grazie

DarkSiDE
19-02-2004, 11:11
ho più tabelle che hanno un campo comune, devo visualizzare cinque record che hanno il maggior valore in questo campo

select nome
from tab1, tab2
order by comune limit desc 0,5

ovviamente nn va..c'è qlc che mi sfugge vero? :p

cionci
19-02-2004, 11:30
Devi fare il join fra le due tabelle...

Questo va così:
order by comune desc limit 0,5

DarkSiDE
19-02-2004, 13:57
Originariamente inviato da cionci
Devi fare il join fra le due tabelle...

Questo va così:
order by comune desc limit 0,5

per l'order ho fatto confusione..

ma scusa per quanto riguarda il join: nn c'è alcuna relazione fra le due tabelle, devo solo elencare tutti i valori di "comune" e prendere i 5 con il valore maggiore

cionci
19-02-2004, 14:05
Ma se fai così fai il prodotto fra le due tabelle...
Il campo Comune esiste in tutte e due le tabelle ?

DarkSiDE
19-02-2004, 14:19
Originariamente inviato da cionci
Ma se fai così fai il prodotto fra le due tabelle...
Il campo Comune esiste in tutte e due le tabelle ?

ho due tabelle: classe1 e classe2
nn vi sono relazioni fra le due, hanno in comune il campo nome e il campo votazione, io devo visualizzare i 5 nomi con la votazione più alta, prendendo entrambe le tabelle

cionci
19-02-2004, 14:36
Sei sempre ocn mysql, vero ? Allora non supporta le subquery...

Allora devi fare due select e mettere in un vettore i primi 5 di ogni tabella...poi ordini il vettore (con sort) e prendi i primi 5...