Ottimizzazione Query

Max61

Utente Attivo
2 Mar 2014
740
4
18
Salve a tutto gli iscritti del forum, alle solite sono ad affrontare un problema che non so risolvere, mi spiego:
ho 5 giocatori che possono assumere 3 possibili risultati ognuno, <; >; = nei confronti degli altri 4...
1) giocatore1 > giocatore2 and giocatore1 > giocatore3 and giocatore1 > giocatore4 and giocatore1 > giocatore5
e fare il calcolo:
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5
2) giocatore1 > giocatore2 and giocatore1 > giocatore3 and giocatore1 > giocatore4 and giocatore1 < giocatore5
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5
3) giocatore1 > giocatore2 and giocatore1 > giocatore3 and giocatore1 > giocatore4 and giocatore1 = giocatore5
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5
4) giocatore1 > giocatore2 and giocatore1 > giocatore3 and giocatore1 < giocatore4 and giocatore1 > giocatore5
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5
5) giocatore1 > giocatore2 and giocatore1 > giocatore3 and giocatore1 = giocatore4 and giocatore1 > giocatore5
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5

e così via per tutte le varie possibilità esistenti...
qualcuno sa ottimizzare la query?
Grazie
Max61
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
ho 5 giocatori che possono assumere 3 possibili risultati ognuno, <; >; = nei confronti degli altri 4...
Sarebbe meglio presentare il problema in modo appropriato indicando il modello dati...
Mi spiego: la tabella che riceve i dati com'è fatta? Gestione orizzontale, verticale, json?
Se verticale il vincolo d'integrità a chi fa riferimento? alla mano giocata o all'intera giocata?


e fare il calcolo:
giocatore1 - giocatore2
giocatore1 - giocatore3
giocatore1 - giocatore4
giocatore1 - giocatore5
Mi sembrano tutti uguali... Matematicamente (giocatoreX-giocatoreY]?
Sembrerebbe tu stia chiedendo delle permutazione, con annessi calcoli...

qualcuno sa ottimizzare la query?
Per far questo devi dare maggiori info...

Altra nota... Un Service per il calcolo?
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao macus_adi grazie.
Provo a spiegarmi: ad ogni smazzata inserisco un record facendo le somme per riga.
Una volta arrivati al punteggio massimo inserisco il record con il calcolo del punteggio massimo raggiunto da ogni giocatore in un altra tabella dove vorrei fare i calcoli riepilogativi sottraendo al giocatore che ha fatto più punti il punteggio degli altri.

Con la speranza di essermi spiegato...
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Allego tabella con campi, così vedi meglio delle mie spiegazioni.
Max61
 

Allegati

  • tblstoricopartite5.pdf
    101,6 KB · Visite: 384

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
QUindi la riga con id=4 rappresenta una smazzata o un'intera giocata?
Coppia cos'è?
Non sto chiedendo un UML di classi, semplicemente rappresenta il problema, veramente non ho capito (il gioco di burraco non lo conosco)...
Non so se è lecito, ma se ci fossere più di 4 giocatori, come fai???
La tabella in allegato, senza dovuta rappresentazione in linguaggio naturale non ha senso (almeno per me)...

Provo a spiegarmi: ad ogni smazzata inserisco un record facendo le somme per riga.
É questo il caso?
Se così fosse, l'entry è completamente sbagliato, stai sfruttando l'iteratività di php senza ottimizzare con il DBMS, il che è un grave errore di logica.

Prendi con le pinze quello che ti sto dicendo in quanto non CONOSCO il gioco, e NON HO CAPITO cosa intendi!!!

Saresti in grado di allegare un'img con i join presenti nel db (solo tabelle interessate al tuo problema) con commenti in modo da far capire cosa vorresti fare?

e fare il calcolo

Se invece necessiti solo ed esclusivamente delle permutazioni possibili potresti dare i vincoli di punteggio (ripeto non conosco il gioco), e soprattutto il confronto è valido per (nX-nY]??
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Ciao macus_adi grazie, provo a spiegare le mie intenzioni: di solito una partita a burraco è fatta da 4 giocatori che fanno 4 smazzate e vince la coppia che fa il punteggio maggiore sottraendo al punteggio maggiore quello minore, il valore che trovato va confrontato con uno score ufficiale che allego.
Es.: coppia1 fa 2000 punti; coppia2 ne fa 1500; differenza 500, secondo lo score alla coppia1 viene assegnato 15 e alla coppia perdente 5. E si continua a giocare contro altre coppie per 4 volte. La somma dei punti dello score di ogni coppia darà la coppia vincitrice.
Detto questo vado al mio problema:
siccome giochiamo tra amici e a volte siamo 4, a volte 5, a volte 6 e per giocare comunque tutti indipendentemente dalle regole ufficiali ci siamo inventati che di volta in volta un giocatore gioca a solo e gli altri formano le coppie.
In una prima tabella inserisco i punteggi di ognuno.
Alla fine delle smazzate inserisco i punteggi totali nella tabella che ho allegato ieri e qui vorrei calcolare automaticamente quello che ho scritto sopra: coppia1 fa 2000 punti; coppia2 ne fa 1500; differenza 500, secondo lo score alla coppia1 viene assegnato 15 e alla coppia perdente 5.
Allego codice che ho utilizzato per fare questi calcoli
PHP:
echo '<td>' . mysql_result($result, $i, 'coppia1') . '</td>';
               echo '<td>' . mysql_result($result, $i, 'max_punti_coppia1') . '</td>';
         
               if (mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia2')|| mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia3') || mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia4') || mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia5')){
                echo '<td>' . (mysql_result($result, $i, 'max_punti_coppia1') - mysql_result($result, $i, 'max_punti_coppia1')) . '</td>';
                $score = (mysql_result($result, $i, 'max_punti_coppia1') - mysql_result($result, $i, 'max_punti_coppia1'));
          
            if ($score == 0 ){
                echo '<td>Vincitore (10-10)</td>';
            } elseif ($score >= 0 && $score <= 40){
                echo '<td>Punteggio: 10-10</td>';             
            } elseif ($score >= 41 && $score <= 120){
                echo '<td>Punteggio: 11-9</td>';
            } elseif ($score >= 121 && $score <= 200){
                echo '<td>Punteggio: 12-8</td>';
            } elseif ($score >= 201 && $score <= 300){
                echo '<td>Punteggio: 13-7</td>';
            } elseif ($score >= 301 && $score <= 400){
                echo '<td>Punteggio: 14-6</td>';
            } elseif ($score >= 401 && $score <= 500){
                echo '<td>Punteggio: 15-5</td>';
            } elseif ($score >= 501 && $score <= 620){
                echo '<td>Punteggio: 16-4</td>';
            } elseif ($score >= 621 && $score <= 740){
                echo '<td>Punteggio: 17-3</td>';
            } elseif ($score >= 741 && $score <= 870){
                echo '<td>Punteggio: 18-2</td>';
            } elseif ($score >= 871 && $score <= 1000){
                echo '<td>Punteggio: 19-1</td>';
            } elseif ($score >= 1000){
                echo '<td>Punteggio: 20-0</td>';
            }
allego risultato ottenuto con il codice utilizzato
Risultato_ottenuto.jpg
Il problema sta nell'ottimizzare questa query
PHP:
               if (mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia2')|| mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia3') || mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia4') || mysql_result($result, $i, 'max_punti_coppia1') > mysql_result($result, $i, 'max_punti_coppia5')){
                echo '<td>' . (mysql_result($result, $i, 'max_punti_coppia1') - mysql_result($result, $i, 'max_punti_coppia1')) . '</td>';
                $score = (mysql_result($result, $i, 'max_punti_coppia1') - mysql_result($result, $i, 'max_punti_coppia1'));
perchè ogni coppia può avere 3 risultati possibili rispetto alle altre: vincente, perdente e pari, quindi le possibilità sono tantissime e mi servirebbe una query ad hoc che comprenda tutti i risultati possibili.
Con la speranza di essermi spiegato...
Allego score
burraco_score.jpg

Grazie
Max61
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Es.: coppia1 fa 2000 punti; coppia2 ne fa 1500; differenza 500, secondo lo score alla coppia1 viene assegnato 15 e alla coppia perdente 5. E si continua a giocare contro altre coppie per 4 volte. La somma dei punti dello score di ogni coppia darà la coppia vincitrice.
Capito.... Per prima cosa elimina tutti gli IF che sono orrendi e utilizza una funzione/metodo/helper/service per creare la tua logica...
Da li hai finito praticamente il giro....

https://gist.github.com/fabiocicerchia/4556892 per le permutazioni
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
Grazie...ma per le mie conoscenze informatiche è troppo complicato.
Max61
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Ottimizzazione query PHP 13
E [Offro] Realizzazione di siti web e ottimizzazione SEO per raggiungere il primo posto su Google Offerte e Richieste di Lavoro e/o Collaborazione 0
G Ottimizzazione Pagine e immagini sito Wordpress SEO e Posizionamento 1
S Seo Service- Servizio di ottimizzazione- a partire da €99! Annunci servizi di Social Media Marketing 2
romeocharly errore del codice html con javascript durante ottimizzazione websitex5 Javascript 7
A Ottimizzazione SEO per sito ricco di immagini (e poco contenuto testuale) SEO e Posizionamento 4
otto9due Ottimizzazione immagini sito web ( articoli ) per facebook share Annunci servizi di Social Media Marketing 2
G Ottimizzazione sito (neofita) SEO e Posizionamento 9
B [vendo] BepperacWEB: Realizzazione siti web responsive, ottimizzazione seo. Offerte e Richieste di Lavoro e/o Collaborazione 0
novello88 Piano di ottimizzazione seo sito web SEO e Posizionamento 2
Z Ottimizzazione sito mobile con url separata SEO e Posizionamento 1
T [Retribuito] - Cerco professionista per ottimizzazione di DB php/mysql Offerte e Richieste di Lavoro e/o Collaborazione 0
felino [Wordpress] Ottimizzazione SEO WordPress 4
Frank10 [Cerco] Ottimizzazione SEO nuovo sito web, pago a ore Offerte e Richieste di Lavoro e/o Collaborazione 1
mikebono ottimizzazione SEO SEO e Posizionamento 2
H Ottimizzazione codice jQuery 2
W Realizzo siti web , ecommerce, per condomini, grafica , ottimizzazione SEO Roma e dintorni Domini 0
M Ottimizzazione database SQL PHP 3
D [Jquery - php] Ottimizzazione script jQuery 1
sergiosv Ciao ecco il mio nuovo sito di ottimizzazione! Presenta il tuo Sito 0
I Sento spesso parlare di ottimizzazione ma.... SEO e Posizionamento 8
A eliminazione scrollbar e ottimizzazione pagina web Webdesign e Grafica 5
S ottimizzazione meta tags e calo visite con php SEO e Posizionamento 0
T Ottimizzazione cadenza frames in Movie Maker Webdesign e Grafica 0
J Consiglio su ottimizzazione SEO e Posizionamento 4
L Ottimizzazione sito SEO e Posizionamento 6
F Ottimizzazione prestazioni MySql Database 1
S Ottimizzazione Codice Asp Classic ASP 0
max75 query su due tabelle e dati doppioni MS Access 2
E Aiuto per query PHP 8
E Query differenza tra tabelle MySQL 5
E Query Alias PHP 4
T Query con date MS Access 1
K Inserimento query Errore 1366 PHP 4
L Query e selezione DB con $_POST PHP 2
M query update e delete PHP 0
A media degli elementi estratti da una query MySQL 0
S Passare query o utm alla pagina successiva Domini 1
O problema con query PHP 4
M Query PHP 8
R query DELETE non cancella i record PHP 1
G Query con i giorni della settimana MySQL 10
E Query annidate o cicli MySQL 1
C bottone query MySQL 0
T Query su due tabelle con totali Database 4
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 27
G Menù a tendina di ricerca con query PHP 1
V Query per una somma PHP 2

Discussioni simili