Unire dati da due tabelle

Tommy03

Utente Attivo
6 Giu 2018
565
54
28
17
Bassano del Grappa (VI)
Salve, ho un nuovo problema.
Ho queste tabelle:
-users(userid,...)
-puntate(userid,eventid,quota,vinta,...)
-events(eventid,sport,...)
In questo modo per ogni utente calcolo il suo punteggio (numero_vittorie * media_quota * (numero_vittorie / puntate_totali))
PHP:
SELECT userdat.userid, ((SELECT COUNT(*) AS vinte FROM puntate WHERE puntate.userid = userdat.userid AND vinta='si')*(SELECT AVG(quota) AS media FROM puntate WHERE puntate.userid = userdat.userid AND vinta='si')*(SELECT COUNT(*) AS vinte FROM puntate WHERE puntate.userid = userdat.userid AND vinta='si') / (SELECT COUNT(*) AS numero FROM puntate WHERE puntate.userid = userdat.userid)) AS punteggio FROM puntate LEFT JOIN userdat ON userdat.userid = puntate.userid GROUP BY userdat.userid ORDER BY punteggio DESC
Con questa query ottengo giustamente come risultato ogni utente associato al suo punteggio. Mi piacerebbe modificare questa query in modo da aggiungere un filtro per eseguire lo stesso calcolo soltanto per un determinato sport (le puntate sono riferite ad un evento con determinato eventid, e ogni evento ha uno sport associato)
Ad esempio:
PHP:
switch($sport){
case 'football' :
$where = "/* cosa devo scrivere qui? */";
break;
case 'tennis' :
$where = "/* cosa devo scrivere qui? */";
break;
...
}
Quindi come faccio a scegliere le puntate di un evento di un determinato sport?
 

Tommy03

Utente Attivo
6 Giu 2018
565
54
28
17
Bassano del Grappa (VI)
Grazie mille per la risposta, ma il mio problema non riguarda UNION, credo che dovrei usare LEFT JOIN o WHERE per collegare i dati ma non so come usarli.
Grazie comunque per la risposta
 

Tommy03

Utente Attivo
6 Giu 2018
565
54
28
17
Bassano del Grappa (VI)
Momentaneamente, per comodità, anche se non sarebbe proprio corretto, ho aggiunto direttamente un campo "sport" anche nella tabella puntate, e vi inserisco lo sport in fase di inserimento senza complicarmi troppo la vita in fase di selezione e mettendo quindi un semplice where. Ovviamente, anche se ho già raggiunto il mio scopo, se qualcuno riuscisse comunque ad aiutarmi mi farebbe un grande favore.
 

marino51

Utente Attivo
28 Feb 2013
2.975
172
63
Lombardia
questa query dovrebbe essere equivalente alla tua,
ho controllato e non ci sono errori ortografici, ma dimmi se funziona,
SQL:
SELECT t.userid, u.nome, sum(t.vinte) * sum(t.vinte) * sum(t.media) / sum(t.numero) AS punteggio FROM (
  SELECT userid, COUNT(*) AS vinte, AVG(quota) AS media, 0        AS numero FROM puntate WHERE vinta='si' GROUP BY userid
  UNION ALL
  SELECT userid, 0        AS vinte, 0          AS media, COUNT(*) AS numero FROM puntate                  GROUP BY userid
) t
LEFT JOIN users u ON t.userid = u.userid
GROUP BY t.userid, u.nome
ORDER BY punteggio DESC, u.nome

se per caso la precedente funzionasse, magari può andare anche questa
SQL:
SELECT t.userid, u.nome, t.sport, sum(t.vinte) * sum(t.vinte) * sum(t.media) / sum(t.numero) AS punteggio FROM (

  SELECT userid, sport, COUNT(*) AS vinte, AVG(quota) AS media, 0        AS numero
  FROM puntate p
  LEFT JOIN sport s ON p.eventid = s.eventid AND sport = 'xyz'
  WHERE vinta='si'
  GROUP BY userid, sport

  UNION ALL

  SELECT userid, sport, 0        AS vinte, 0          AS media, COUNT(*) AS numero
  FROM puntate p
  LEFT JOIN sport s ON p.eventid = s.eventid AND sport = 'xyz'
  GROUP BY userid, sport

) t
LEFT JOIN users u ON t.userid = u.userid
GROUP BY t.userid, u.nome, t.sport
ORDER BY punteggio DESC, u.nome

mi riprometto di verificare se esiste di meglio,
per gestire 2 livelli di "group by" nella stessa query,
in una forma portabile su sistemi diversi
 
Ultima modifica:

Tommy03

Utente Attivo
6 Giu 2018
565
54
28
17
Bassano del Grappa (VI)
Marino51 sei favoloso, non so come ringraziarti. Funzionano entrambe perfettamente, sento che grazie ai tuoi consigli mi viene sempre più facile capire cose che fino a poco tempo fa mi sembravano impossibili!
Grazie mille
 
Discussioni simili
Autore Titolo Forum Risposte Data
I unire piu tabelle con gli stessi dati PHP 2
rebeca Come Unire file PST in Uno? Windows e Software 0
K Unire più tabelle in una singola tabella PHP 3
F [PHP] Cercare voci uguali nel db e unire alcune variabili PHP 0
D [PHP] Unire 2 Array con ID in comune PHP 0
R unire 2 reti in una Adsl e Connettività 0
P Unire record Database 0
trattorino [PHP] unire due variabili PHP 0
trattorino [PHP] Unire a una query piu tabelle PHP 7
D unire due tabelle MySQL 1
S Unire due foreach simili PHP 5
D Unire campi PHP 2
P Unire il tasto submit anzicchè averlo in due file PHP 2
G Unire risultato di una select PHP 2
M Unire due modalità di pagina responsive in una... Javascript 0
P Unire due funzioni... Javascript 1
felino [RISOLTO] [MySQL] Unire due tabelle esistenti in una nuova MySQL 1
M Unire piu funzioni di una classe PHP 12
Monital Unire deglia rray bidiemnsionali PHP 7
criric Unire due array - array_merge() PHP 2
P Unire celle e righe in tabella HTML e CSS 0
G unire union e join insieme MySQL 7
P Unire, confrontare due tabelle da due db diversi fati in phpmyadmin Database 5
max_400 Unire 2 query - calcoli matematici: somma, moltiplicazione, percentuale PHP 7
I consiglio su come unire 2 codici? HTML e CSS 1
M Eliminare backup automatico e unire partizioni Hardware 0
R creazione carrello - unire sito al database PHP 14
T unire più campi e formare un link Database 0
L unire due pagine PHP 0
Z Unire i risultati di due Query PHP 3
X unire pagine php PHP 2
M X POLE e per chi si vuole unire Discussioni Varie 17
Cassandra Si possono unire più linguaggi? HTML e CSS 3
L Estrazione dati php Database 6
L Estrazione dati casuali non doppioni MySQL 1
J Form inserimento dati in database Ajax 1
D Recupero dati da HDD esterno Hardware 0
L non duplicare dati in stato "aggiornamento" PHP 6
L inserire dati multi livello PHP 8
L input (rilevare cambio dati) PHP 3
L input dati con inser into select ? PHP 4
W Invio Dati ad un altra pagina Classic ASP 1
A Mostrare dati database per pagine PHP 2
Samuele Ronzani Sposta dati in una tabella eliminandolo MySQL 6
S Gestire scelta dropdown con dati da Mysql PHP 2
C Estrarre dati stringa Sql Database 1
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
W Evitare ridondanza dei dati Classic ASP 3
MarcoGrazia Dati nulli su join tra più tabelle MySQL 1
A Inserimento dati nel database tramite form + altre operazioni PHP 18

Discussioni simili