stai annaspando nel classico bicchiere d'acqua.
per prima cosa direi che dovresti normalizzare in formato ANSI le date che hai memorizzato e cioe' portarle da (es.) "02/06/2009" a "2009-06-02".
Fatto questo potrai gestire le date facilmente con tutte le funzioni a disposizione senza dover convertire e riconvertire i vari formati.
Ad ogni modo.... str_to_date() converte il contenuto del campo da stringa "02/06/2009" a data "2009-06-02". E questo lo fai nella SELECT ma non lo fai nel where.
Vediamo come dovrebbe essere la query SQL:
codice:
SELECT Data_Appuntamento
FROM appuntamenti
WHERE STR_TO_DATE(`Data_Appuntamento`, '%d/%m/%Y')
BETWEEN
STR_TO_DATE('03/03/2009', '%d/%m/%Y')
AND
STR_TO_DATE('04/04/2009', '%d/%m/%Y')
ORDER BY STR_TO_DATE(`Data_Appuntamento`, '%d/%m/%Y') ASC
Se invece vuoi fare le cose per bene attualizzi il campo varchar dove hai messo la data in un campo DATE e la query diventera':
codice:
SELECT Data_Appuntamento
FROM appuntamenti
WHERE `Data_Appuntamento`
BETWEEN
STR_TO_DATE('03/03/2009', '%d/%m/%Y')
AND
STR_TO_DATE('04/04/2009', '%d/%m/%Y')
ORDER BY `Data_Appuntamento` ASC
Nella union il numero e tipo dei campi deve essere lo stesso in entrambe le query. Quindi non puoi selezionare un campo nella prima e * nella seconda.
Aggiungerei ancora di non mettere spazi nei nomi di campo come non andrebbero messi nei nomi di file ed anche di utilizzare solo le minuscole se ti vuoi garantire una portabilita' verso altri sistemi (es. server su linux) senza dover riscrivere tutto.