Newsgroup: it.comp.www.php
Titolo: ordinare dentro a un while

Devo far comparire in una pagina una scritta con il giorno in cui una
persona compie gli anni, solo delle persone che compiono gli anni nel
mese corrente, quindi ad esempio a febbraio, andra a prendere chi
compie gli anni a febbraio e mi dirà
Questo mese, il giorno 08 compie gli anni Vincenzo
Questo mese, il giorno 20 compie gli anni Marco
Purtroppo, la stringa con le date di nascita riesco a ordinarla solo
per anno in quanto è yyyymmdd, e quindi puo capitare che venga fuori
quanto segue-
Questo mese, il giorno 20 compie gli anni Marco
Questo mese, il giorno 08 compie gli anni Vincenzo
Io invece vorrei riuscire a ordinare i dati, per poi ricavare la frase,
per giorno di nascita e non per anno, come posso fare, segue una parte
del codice.
$query = "
SELECT
  	id,
  	tipo,
  	amm_no,
  	amm_co,
  	amm_dt,
  	amm_em
FROM
	ang
ORDER BY
	amm_dt ";
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
      	{
	$mesecompl = substr("$row[amm_dt]", 4, 2);			$giornocompl =
substr("$row[amm_dt]", 6, 2);
									if ($mesecompl==$mese){
echo "Questo mese, il giorno ".$giornocompl." compie gli anni ".
$row[amm_no]."<br />";
}
Grazie per l'aiuto
--
Stucco
http://stucco.altervista.org

 per anno in quanto č yyyymmdd, 
   Prima di tutto, ti chiedo perché hai deciso, se l'hai deciso tu, di 
memorizzare una data in una stringa, quando esistono tipi di dati piů 
adatti. Considera che, solitamente, per i tipi data nativi, esistono 
apposite funzioni che estraggono le varie parti (giorno, mese, etc.) che 
ti pottrebbero rendere la vita migliore. Dopo di che, ti suggerisco di 
spezzare la stringa-data nelle sue componenti (anno, mese, giorno) e di 
usare queste nel criterio di ordinamento.
   Qualcosa del genere, adattato al dialetto SQL del DBMS che usi, 
potrebbe anche funzionare:
         SELECT <campo_1>, <campo_2>, ...
           FROM  <tabella>
           WHERE SUBSTRING(<campo_data> FROM 4 FOR 2) = '<mese>'
           ORDER BY SUBSTRING(<campo_data> FROM 6 FOR 2)
 
   Altrimenti puoi sempre far uso delle funzioni di ordinamento di array 
del PHP: consulta, a tale proposito, la sezione del manuale ad essi dedicata
 
http://it.php.net/manual/en/ref.array.php
-- 
Alla prossima,
Marco

 Questo mese, il giorno 08 compie gli anni Vincenzo
Ci ho messo un po' a capirla ;)
Dunque, se la data ce l'hai come CHAR e non come DATE, puoi ordinare cosě:
order by substring(amm_dt, 5, 4)
-- 
Jax
====
Il fumare lo aiutava molto davanti alle donne, a cui il fumo piace,
anche perché lo ritengono, e magari con ragione, un gradevole presagio
dell'arrosto. (Carlo Emilio Gadda)

Perchè per date anteriori al 1970 non riuscivo a fare funzionare il
tutto...

 tutto...
   Buona risposta! :-)
   Tuttavia potevi usare un offset per gli anni: posto che il tuo DBMS, 
se non gestisce le date anteriori al 1970, probabilmente gestisce tutto 
il XXI secolo, potevi aggiungere (in fase di input) e sottrarre (in fase 
di output) cento anni alle date e comunque usare i tipi appropriati. 
Oppure comportarti, sempre in tal senso, in modo adeguato alle 
disponibilità del DBMS.
   Ad ogni modo, una funzione di estrazione di parte delle stringhe ci 
deve essere per forza, per cui la soluzione più conservativa rimane 
certamente quella suggerita da Jax e da me.
-- 
Alla prossima,
Marco

Vi ringrazio entrambi sperando che la gestione della data così non mi
crei problemi .. :-)
-- 
Stucco
http://stucco.altervista.org

 crei problemi .. :-)
Non credo che te ne creerà, basta tenerlo in mente.
Almeno tu ce l'hai in formato yyyymmdd, pensa a me che a volte mi ritrovo
con date in formato yymmdd o, peggio ancora, ddmmyy............ se il tipo
che ha progettato questi db non è ancora morto grazie ai miei accidenti è un
miracolo!
-- 
Jax
====
Bisogna vivere come si pensa, altrimenti si finirà per pensare come si
è vissuto. (Paul Bourget)