Unire dati da due tabelle

Tommy03

Utente Attivo
6 Giu 2018
606
57
28
17
Vicenza
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
606
57
28
17
Vicenza
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
606
57
28
17
Vicenza
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
3.017
174
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
606
57
28
17
Vicenza
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
X unire più file in un pdf Windows e Software 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 PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
L Ricezione dei dati su file php da modulo html PHP 6
L inserimento form dati multipli ? PHP 0
S Leggere dati da API e visualizzarli PHP 0
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
A invio massivo dati a file php Javascript 4
M Inviare dati nel db dopo risposta alert PHP 0
A recuperare i dati passati nel post PHP 1
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

Discussioni simili