Newsgroup: it.comp.www.php
Titolo: Selezionare un record particolare all'interno di un gruppo

Se scrivo:
$record = mysql_query("SELECT parametro1, max(parametro2) as parametro2,
parametro3, parametro4, parametro5 FROM tabella GROUP BY parametro1 ORDER BY
parametro2") or die(mysql_error);
Seleziono il record, fra quelli che hanno parametro1 uguale, con paramentro2
massimo? Penso di no perchč se eseguo questa query su un database il
risultato č che mi viene selezionata (anzi creata) una riga contenente il
parametro2 massimo, per il parametro 1 (e fin qua tutto OK) il problema č
che degli altri campi mi seleziona il primo record che incontra all'interno
del database, io invece avrei bisogno di selezionare tutto il record che
contiene parametro2 massimo fra i vari record con parametro1 uguale.
Spero di essermi spiegato bene, ma in sostanza se ho:
a        10        x    x    x
a        20        y    y    y
a        30        z    z    z
io devo selezionare:
a        30    z    z    z
e non
a        30    x    x    x come fa lo script che ho postato!?!

 parametro2") or die(mysql_error);
Non so se funziona, prova con: SELECT * from tabella where
parametro2=max(parametro2)


Se non sbaglio, però, così mi viene restituita la riga con parametro 2
massimo (quindi una sola riga) io, invece, ho bisogno di selezionare, per
ogni gruppo identificabile con parametro1, il massimo relativo a quel
gruppo, quindi, ripeto;
a    40    p    p    p
a    10    x    x    x
b    20    y    y    y
c    30    z    z    z
a    20    z    z    z
b    40    k    k    k
s    50    z    z    z
c    80    k    k    k
alla fine dei miei script devo selezionare le righe:
a    40    p    p    p
b    40    k    k    k
c    80    k    k    k
s    50    z    z    z
Alcuni giorni fa qualcuno di voi mi ha consigliato:
$result = mysql_query("SELECT Parametro1, max(Parametro2) as Parametro2,
Parametro3, Parametro41, Parametro5 FROM
Tabella GROUP BY Parametro1") or die(mysql_error());
while($line = mysql_fetch_assoc($result)){
 mysql_query("DELETE FROM Tabella WHERE Parametro1 =
'{$line['Parametro1']}'") or
die(mysql_error());
 mysql_query("INSERT INTO Tabella (Parametro1, Parametro2, Parametro3,
Parametro4, Parametro5) values
('{$line['Parametro1']}', '{$line['Parametro2']}', '{$line['Parametro3']}',
'{$line['Parametro4']}', '{$line['Parametro5']}')") or die(mysql_error());
}
mysql_free_result($result);
In realtà, però, ho notato che questo script mi riscrive il database
Tabella, riferendomi all'esempio sopra, come segue:
a    40    p    p    p
b    40    y    y    y
c    80    z    z    z
s    50    z    z    z
Che è diverso da ciò che voglio io e cioè:
a    40    p    p    p
b    40    k    k    k
c    80    k    k    k
s    50    z    z    z
Purtroppo ho provato in tutti i modi, ho provato anche a scrivere la Select
nel seguente modo:
mysql_query("SELECT * FROM Tabella GROUP BY Parametro1 HAVING Parametro2 =
max(Parametro2)") or die(mysql_error());
Ma niente da fare! :-(
Come è possibile?

 Come è possibile?
penso ti convenga fare una prima query per trovare parametro1 con rispettivo
valore massimo..
e ciclandone il risultato ottenere il resto dei parametri..
non sono sicuro ma credo ci sia anche il modo di fare tutto questo in una
sola query..
-- 
www.iuz-lab.info

Grazie iuz.
Se in futuro dovesse servire a qualcuno ecco come ho risolto:
$max = mysql_query("SELECT parametro1, max(parametro2) as parametro2
             FROM tabella GROUP BY parametro1") or die(mysql_error());
while($riga = mysql_fetch_array($max)){
$var1 = $riga[0];
$var2 = $riga[1];
$riga2 = mysql_query("SELECT * FROM tabella WHERE parametro1= '$var1' AND
parametro2= '$var2'") or die(mysql_error());
$DatiFinali = mysql_fetch_array($Riga2);
mysql_query("DELETE FROM tabella WHERE parametro1 =
'{$riga2['parametro1']}'") or diemysql_error());
mysql_query( "INSERT INTO tabella (parametro1, parametro2, parametro3,
parametro4, parametro5 );
             values ('{$DatiFinali[0]}', '{$DatiFinali['1']}',
'{$DatiFinali['2']}', '{$DatiFinali['3']}', '{$DatiFinali['4']}',
'{$DatiFinali['5']}'") or die(mysql_error());
mysql_free_result($max);