query parzialmente funzionante

  • Creatore Discussione Creatore Discussione rino63
  • Data di inizio Data di inizio

rino63

Nuovo Utente
7 Apr 2015
6
0
0
Carissimi,

Nel mio Db MySQL ho una tabella contenente brani musicali, tra i cui vari campi (titolo, autore, album, ecc...) esistono anche quello "punteggio" (int) e "caricato_il" (date).
Sto cercando di estrarre il brano che ha ottenuto il punteggio più alto tra quelli inseriti in una determinata settimana, e ho scritto la seguente query:

SELECT * FROM `brani`
WHERE `punteggio` = (SELECT MAX(punteggio)
FROM `brani` WHERE
`caricato_il` BETWEEN '2015-05-18' AND '2015-05-24')

Ovviamente la query dovrebbe restituire i dati relativi ad un unico brano (non esistono al momento parità di punteggi tra brani inseriti la stessa settimana...)

Il fatto strano è questo: inserendo alcuni intervalli di date mi compare più di una riga: Mysql inserisce brani inseriti IN ALTRE SETTIMANE, ma che hanno LO STESSO PUNTEGGIO del brano vincitore; è come se in questo caso non considerasse il campo `caricato_il`.
N.B.
Ovviamente non mi compaiono messaggi d'errore.

Ringrazio chiunque voglia chiarirmi le idee.
 
hai scritto 2 select,

la prima estrae tutti i record che hanno punteggio uguale a .... (tanti record indipendenti dal periodo)
la seconda estrae il massimo punteggio di un periodo

il periodo lo devi applicare anche alla prima select
ciao
Marino
 
query parzialmente funzionante bis

Salve Marino,
Ti ringrazio molto per l'aiuto, in effetti il tuo ragionamento è sensato.
Interpretando il tuo consiglio ho provato a riscrivere la query:

SELECT * FROM `brani` WHERE `caricato_il` BETWEEN '2015-05-18' AND '2015-05-24'
AND `punteggio` = (SELECT MAX(punteggio))

Però la query mi restituisce TUTTI i BRANI caricati in quel periodo di tempo.

Ho anche provato a fare una subquery "sequenziale" cioè:

SELECT * FROM `brani`
WHERE `caricato_il` BETWEEN '2015-05-18' AND '2015-05-24' ORDER BY `punteggio` AS `classifica`;
SELECT * FROM `classifica` WHERE `classifica`.`punteggio` = SELECT MAX(punteggio)

Ma mi dà un'errore di sintassi non specificato.
Nonostante ripetuti sforzi, continuo a non capire dove sta l'errore. In teoria mi sembrava una query semplice, invece...
In ogni caso grazie dell'interessamento.
 
PHP:
SELECT * FROM brani
WHERE caricato_il BETWEEN '2015-05-18' AND '2015-05-24'
AND punteggio = (SELECT MAX(punteggio) FROM brani WHERE caricato_il BETWEEN '2015-05-18' AND '2015-05-24')

oppure
PHP:
SELECT * FROM brani
WHERE caricato_il BETWEEN '2015-05-18' AND '2015-05-24'
ORDER BY punteggio DESC
LIMIT 1

ciao
Marino
 
Ultima modifica:
funzionaaa!

:mavieni:
Grazie mille Marino, se potessi ti offrirei pizza e birra!
Col senno di poi (come sempre) era semplice...

Un Saluto
Mauro
 

Discussioni simili