Newsgroup: it.comp.www.php
Titolo: SELECT

Ciao
SELECT max(data_accesso) FROM `accessi` WHERE 1
per ottenere l'ultima data di accesso..è una forma corretta?
grazie

f22 wrote:

no
manca un ORDER BY data_accesso DESC
-- 
there is no real life, only AFK

Ciao


Be'... WHERE 1 e' superfluo. Dato che comunque vuoi il massimo su tutto
l'archivio.
Tieni pero' presente che data_accesso deve essere un campo ordinabile -
se c'e' dentro roba tipo "Tue 2007 Oct 10 22:33:44", "MAX" potrebbe non
tornarti la data di accesso piu' recente ma quella che risulta "ultima"
in ORDINE ALFABETICO.
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

 manca un ORDER BY data_accesso DESC
? E da quando bisogna mettere un order by usando max o min? Mi sono 
perso qualcosa?
-- 
Jax

 
da sempre, questo ti dà uno dei risultati maggiori. non il maggiore in
assoluto
id cerco_ultimo
44 1000
45 1000
può benissimo selezionare 44 mentre tu cerchi 45
ciao


 può benissimo selezionare 44 mentre tu cerchi 45
Scusa, ma select max(cerco_ultimo) from tabella in questo caso 
restituisce 1000, che è il risultato corretto. Poi, se tu cercavi quello 
con id 44 o 45 è un altro discorso, e non è detto che se tu ceravi io 
cercassi 45.
E' ovvio che se ci sono 2 o più record che hanno lo stesso valore, che è 
il massimo, cercando questi valori nel db ne troverai altrettanti.
Mettere un order by sulla select max(...) è assolutamente inutile IMHO.
E' altrettanto inutile se, dopo la select max() fai una select * from 
tabella where campo1 = val_massimo, o almeno è inutile se lo fai su campo1.
-- 
Jax

può benissimo selezionare 44 mentre tu cerchi 45
Non credo: se cerchi MAX(id), *DEVE* ritornare 45.
Se cerchi MAX(cerco_ultimo), in effetti ti rispondera' con il 1000
dell'ID 44 o con il 1000 dell'ID 45, e non li puoi distinguere. Ma
infatti, perche' dovresti?
Inoltre ORDER BY ordina i *risultati*. Se selezioni MAX(id), tu di
risultati ne ottieni UNO SOLO... quindi, che tu lo ordini o che tu
non lo ordini, non cambia assolutamente niente.


 infatti, perche' dovresti?
metti che sto cercando l'ultimo cliente passato al telepass in tutta italia.
ne sono passati 10 alle 23:59:59 io voglio premiare l'ultimo transitato con
un bel flauto in plastica.
a quel punto per sapere effettivamente l'ultimo a transitare (vale per i
campi date ovviamente) sono costretto a usare un order by attraverso
un'altra chiave. questo intendevo.
quello che intendi tu è altrettanto corretto.
MAX è così veloce perché non si preoccupa di fare order di sorta all'interno
dei dati che ricava dopo il primo insieme.


un'altra chiave.
Si', potresti fare anche cosi'; ma se e' questo che vuoi sapere, ti
conviene usare due query.
	SELECT @DATA:=MAX(data_accesso);
	SELECT MAX(id) WHERE data_accesso = @DATA;
Un approccio con ORDER BY / SELECT ti costerebbe assai piu' caro, o
almeno, cosi' sospetto :-)


 dei dati che ricava dopo il primo insieme.
Sei proprio sicuro? Mai provato a fare una max() su un campo non 
indicizzato di una tabella di un milione di record? Inoltre, come 
farebbe, secondo te, a trovare il max senza eseguire un ordinamento? Magia?
-- 
Jax

dalle varie stazioni sparse in Italia?
In *QUEL* caso, ci sarebbe da fare anche la considerazione "paracula":
mettiamo caso che il sistema ritorni l'ID sbagliato. Si puo' sostenere
che sia quello giusto?
Certamente: hai tre persone che risultano passare alle 23:59:59; e' la
tua parola contro la loro, che ID=44 sia passato prima di ID=45. Tutti
e tre hanno la stessa, identica ora nel database, e quindi non possono
_dimostrare_ che tu hai torto... :-)
Leonardo pratico


 
ma no intendo dire che utilizzando l'indice  lui trova max, ma poi non si
preoccupa di fare altro giustamente e il risultato non può che essere
random
