Problemone con SELECT

Ciao a tutti.

Ho un problema con una query.

Ho 2 tabelle strutturate così:

TABELLA ADMINISTRATORS

id    |  nome | cognome | indirizzo_email    

TABELLA COMPETIZIONI

id_comp | id  |   data |   nome_gara |tipologia_gara | km_gara |tempo_gara|tempo_km_gara|    note

Ovviamente ogni utente può inserire le proprie gare e ovviamente alla fine ogni utente avrà inserito + gare con tempi diversi.

Nella mia query io volevo fare un'estrazione in modo tale che risultassero i tempi migliori per ciascun utente (cioè il miglior tempo_km_gara per cognome)

Non riesco in alcun modo...

VI MOSTRO QUELLO CHE HO FATTO IO:

$query = @mysql_query ("SELECT  id_comp, data, nome_gara, tempo_km_gara, tipologia_gara, km_gara, tempo_gara,  note, competizioni.id  AS administrators,  nome, cognome, indirizzo_email FROM competizioni JOIN  administrators  ON competizioni.id = administrators.id order by cognome asc,tempo_km_gara");

inviato 8 anni fa
danilob
X 0 X

Versione di MySQL a disposizione?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Versione MySQL: 5.0.58-log

risposto 8 anni fa
danilob
X 0 X

qui la soluzione:

http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html

nel tuo caso potresti usare il secondo esempio riportato

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

non  capisco questo:

FROM   shop s1

________

shop è la tabella ma s1 cos'è?

risposto 8 anni fa
danilob
X 0 X

E' un alias, serve ad unsare la parola "s1" al posto di "shop" nel resto della query

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

niente... non riesco proprio a capire... Shop s1 poi usa s2....

Mi puoi fare un'esempio usando la mia query...

grazie e scusa...

risposto 8 anni fa
danilob
X 0 X

anche nella tua query c'è un alias:

competizioni.id  AS administrators

AS è facoltativo, quindi spesso viene sottointeso, proprio come nell'esempio della documentazione ufficiale:

SELECT s1.article, dealer, s1.price

FROM shop s1

JOIN (

  SELECT article, MAX(price) AS price

  FROM shop

  GROUP BY article) AS s2

  ON s1.article = s2.article AND s1.price = s2.price;

s1 è un sinonimo di shop mentre s2 è un sinonimo del risultato della SELECT più interna, quella tra parentesi tonde.

La SELECT interna cerca il miglio prezzo per ciascun articolo, mentre quella più esterna restituisce gli articoli a cui si riferiscono questi prezzi migliori. Nel tuo caso la SELECT più interna cercherà le competizioni migliori raggruppandole per id. La select più estenra leggerà gli amministratori che hanno proprio questi id.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ma io ho 2 rabelle correlate, una admin e l'altra competizioni nell'esempio lui fa una sotto join nella stessa tabella ... o no?

che casino

risposto 8 anni fa
danilob
X 0 X

sono riuscito a trovarmi il tempo migliore e il nome della gara attraverso la tabella competizioni:

$query = @mysql_query ("SELECT * FROM competizioni as comp1

JOIN (SELECT id, min(tempo_km_gara) AS tempo_km_gara FROM competizioni

  GROUP BY id) AS comp2 on comp1.id = comp2.id and comp1.tempo_km_gara = comp2.tempo_km_gara");

ora però attraverso la tabella administrators come faccio a fare coincidere il nome di chi ha corso la gara...

risposto 8 anni fa
danilob
X 0 X

Devi andare in JOIN tra la tabella administrators  e il risultato della SELECT che hai scritto, un po' come già fai nella query che hai riportato, ovvero attraverso una sub-select

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda