Visualizzazione risultati 1 fino 14 di 14

Discussione: Insert e Update insieme?

  1. #1
    Guest

    Predefinito Insert e Update insieme?

    Salve a tutti, ho una tabella Risultati nella quale inserisco con un form i campi id_casa, reti_fatte , reti_subite e giornata.
    Ora vorrei fare in modo che gli altri campi della tabella e cioè punti, vittorie, pareggi e sconfitte si popolassero automaticamente sulla base delle reti fatte e subite. Ho provato con un codice pubblicato su questo forum da Niso che con un update andava a popolare questi campi ma solo dopo aver inserito i risultati.
    E' possibile invece farlo in concomitanza dell'esecuzione della query di insert?
    Se sì, me lo postereste anche solo un esempio di codice, la questione è assolutamente al di sopra delle mie scarsissime conoscenze di php. Grazie in anticipo.

  2. #2
    Guest

    Predefinito

    non ho ben capito cosa vuoi fare, ma ti faccio una domanda...
    se il record non esiste (visto che devi ancora fare l'insert) come puoi fare un update?
    Perchè non puoi fare tutto con l'insert?

  3. #3
    Guest

    Predefinito

    Ho paura di non aver afferrato del tutto la richiesta, ma dovresti risolvere così:
    Codice PHP:
    if($reti_fatte>$reti_subite){
    $pezzo_q="vittorie=vittorie+1, punti=punti+3";
    }else if(
    $reti_fatte<$reti_subite){
    $pezzo_q="sconfitte=sconfitte+1";
    }else if(
    $reti_fatte==$reti_subite){
    $pezzo_q="pareggi=pareggi+1, punti=punti+1";
    }

    mysql_query("UPDATE Risultati SET giornata='$giornata', $pezzo_q WHERE id_casa='$id_casa' LIMIT 1");
    dove i valori delle variabili sono prese ovviamente da form (le ho chiamate come i campi da te indicati per comodità).


    Ciaoo!!!!!

  4. #4
    Guest

    Predefinito

    Grazie Debug, provo subito questo codice ma...c'è un ma, dove lo inserisco? Cerco di spiegarmi meglio: quando premo il mio bel tasto submit del form, il file elabora_risultati esegue la query di insert e popola la tabella (a parte punti, vittorie ecc.). Questo update lo infilo in questo stesso file? O devo creare un altro form per l'update?

  5. #5
    Guest

    Predefinito

    Ehm no aspetta, io pensavo che dovevi eseguire soltanto un update, non un insert!
    Però in questo senso non hanno motivo di esistere gli altri campi che tu vuoi popolare dinamicamente, perchè, se ho ben capito, ogni record che vai ad inserire è una giornata, no? Allora quei dati che vuoi inserire puoi calcolarteli direttamente da php, anche perchè non hanno senso in quella tabella!


    Ciaooo!!!

  6. #6
    Guest

    Predefinito

    Perdonami Debug ma devo dire in termini molto tecnici che non ci ho capito 'na mazza

  7. #7
    Guest

    Predefinito

    era quello che volevo sapere io ...
    insomma prima calcoli punti, vittorie, pareggi e sconfitte e poi fai l'insert e solo quello... da quello che ho capito nel tuo caso l'update non serve

  8. #8
    Guest

    Predefinito

    Quello che volevo fare io era utilizzare il form di inserimento per la squadra, le reti fatte e subite e trovare quindi nella tabella anke punti vittorie ecc sulla base appunto del differenziale tra segnate e subite. Una funzione che desse questo risultato sarebbe fattibile?

  9. #9
    Guest

    Predefinito

    estrapoli i dati dal db, esegui il calcolo dei punti e li stampi a video.

  10. #10
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ho provato a rileggere due volte le tue spiegazioni... ma mi è impossibile comprendere la tua esigenza (sarà che di fantacalcio e simili mastico poco..).
    Comunque per quel che ho capito, e mi conforta anche il messaggio di debug, non si riesce a seguire la logica perché la tabella come la vuoi fare tu non è progettata bene..
    Cioè, come dice anche debug, una cosa sono le varie giornate (vari record) e una cosa sono le statistiche (totali, medie, etc) che vuoi calcolarne, che riflettono valori di più record della tabella delle giornate.
    Dunque da una parte dovresti avere una tabella con le giornate.. e se proprio non vuoi ricalcolarti ogni volta -come hanno consigliato- statistiche varie fai una update in record di un'altra tabella, dove -vado a braccio- ogni record corrisponde ad una "casa" (squadra o quelchedè), in relazione all'id_casa dell'altra tabella, dove aggiorni quando serve i calcoli e statistiche.
    Di codice da improvvisarti -come chiedevi- ce ne può esser ben poco, a meno che non ci fai vedere quel che hai fatto finora, o quantomeno dovresti spiegarci bene tutto il meccanismo e soprattutto di COSA stiamo parlando perché almeno io non ne ho la più pallida idea.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  11. #11
    Guest

    Predefinito

    Ci provo !
    Ho un form col quale inserisco due righe alla volta nella tabella RISULTATI in questi campi, i record sono: ID_SQUADRA, RETI_FATTE, RETI_SUBITE e GIORNATA (una riga per la squadra che gioca in casa e una per quella in trasferta) e così via.
    Dovendo visualizzare una classifica ho bisogno anche dei punti, vittorie pareggi e sconfitte per ciascuna squadra sempre per ciascuna giornata giocata. Ecco perchè mi sarebbe utile che questi ultimi campi potessero essere popolati semplicemente con un qualcosa che sulla base della differenza tra reti fatte e subite mi genera punti vittorie ecc. e li inserisce nella riga relativa a quella squadra e a quella giornata.
    Esempio: riga 1 ID_CASA 5 RETI_FATTE 2 RETI_SUBITE 1 PUNTI (vuoto) VITTORIE (vuoto) PAREGGI (vuoto) SCONFITTE (vuoto) GIORNATA 1, nella riga 2 i record relativi alla squadra in trasferta.
    Mi manca di riempire quei campi vuoti senza doverli inserire a mano.
    Il form per farlo ce l'avrei e l'ho usato nella stagione appena conclusa ma avevo solo 8 squadre da gestire, ora siamo in 20 e trovare una soluzione del genere mi permetterebbe di velocizzare l'inserimento dei risultati ed evitare errori.
    Che ci volete fare, mi sono preso 'sta bega... Il sito è quello nella firma.

  12. #12
    Guest

    Predefinito

    Allora credo dovresti modificare la struttura della tabella!
    Io la farei così:

    id_casa; id_trasferta; reti_casa; reti_trasferta; giornata.

    Esempio di un record:

    1; 2; 3; 0; 1.

    Rispettivamente: l'id della squadra in casa, l'id della squadra ospite, le reti segnate dalla prima, le reti della seconda, la giornata giocata.
    E da questo puoi farti tutte le classifiche che vuoi! Senza altro aggiungere nel db.


    Ciaooooo!!!!!!

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da heracleum
    Comunque per quel che ho capito, e mi conforta anche il messaggio di debug, non si riesce a seguire la logica perché la tabella come la vuoi fare tu non è progettata bene..
    Cioè, come dice anche debug, una cosa sono le varie giornate (vari record) e una cosa sono le statistiche (totali, medie, etc) che vuoi calcolarne, che riflettono valori di più record della tabella delle giornate.
    Dunque da una parte dovresti avere una tabella con le giornate.. e se proprio non vuoi ricalcolarti ogni volta -come hanno consigliato- statistiche varie fai una update in record di un'altra tabella, dove -vado a braccio- ogni record corrisponde ad una "casa" (squadra o quelchedè), in relazione all'id_casa dell'altra tabella, dove aggiorni quando serve i calcoli e statistiche.
    Dimenticavo...le istruzioni Mysql mi hanno permesso di raggruppare per ciascuna squadra punti vittorie reti ecc. ecc. che avevo inserito nella scorsa stagione e tirar su le classifiche, il problema non è tanto l'organizzazione delle tabelle quanto quello di evitare l'inserimento di record che si potrebbero magari ottenere in via indiretta con una qualche funzione php.
    Ciao
    Ultima modifica di pes5League : 28-02-2006 alle ore 01.21.07

  14. #14
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da debug
    ... id_casa; id_trasferta; reti_casa; reti_trasferta; giornata. ...
    L'idea è giusta, ma davvero complicata da gestire: ecco come puoi fare in PHP la stampa di una classifica stile Serie A del Televideo RAI (pag. 203):
    Codice PHP:
    <?php
    // dagli ID risali ai nomi delle squadre
    $query1 = "SELECT id_squadra, nome_squadra FROM SQUADRE ORDER BY id_squadra";
    // conta le partite vinte in casa dalle squadre...
    $query2 = "SELECT id_casa, COUNT(reti_casa) AS vinte FROM GIORNATE WHERE reti_casa > reti_trasferta GROUP BY id_casa ORDER BY id_casa";
    // ... quelle pareggiate in casa...
    $query3 = "SELECT id_casa, COUNT(reti_casa) AS pari FROM GIORNATE WHERE reti_casa = reti_trasferta GROUP BY id_casa ORDER BY id_casa";
    // ... e quelle perse
    $query4 = "SELECT id_casa, COUNT(reti_casa) AS perse FROM GIORNATE WHERE reti_casa < reti_trasferta GROUP BY id_casa ORDER BY id_casa";
    // conta le partite vinte in trasferta dalle squadre...
    $query5 = "SELECT id_trasferta, COUNT(reti_trasferta) AS vinte FROM GIORNATE WHERE reti_casa < reti_trasferta GROUP BY id_trasferta ORDER BY id_trasferta";
    // ... quelle pareggiate in trasferta...
    $query6 = "SELECT id_trasferta, COUNT(reti_trasferta) AS pari FROM GIORNATE WHERE reti_casa = reti_trasferta GROUP BY id_trasferta ORDER BY id_trasferta";
    // ... e quelle perse
    $query7 = "SELECT id_trasferta, COUNT(reti_trasferta) AS perse FROM GIORNATE WHERE reti_casa > reti_trasferta GROUP BY id_trasferta ORDER BY id_trasferta";
    // infine, calcola quante reti ha segnato e subito ciascuna squadra in casa...
    $query8 = "SELECT id_casa, SUM(reti_casa) AS segnate, SUM(reti_trasferta) AS subite FROM GIORNATE GROUP BY id_casa ORDER BY id_casa";
    // ... e in trasferta
    $query9 = "SELECT id_trasferta, SUM(reti_trasferta) AS segnate, SUM(reti_casa) AS subite FROM GIORNATE GROUP BY id_trasferta ORDER BY id_trasferta";

    // esegui le 9 query ($db è l'oggetto di connessione dal database ottenuto da mysql_connect() )
    $result1 = mysql_query($query1, $db);
    $result2 = mysql_query($query2, $db);
    $result3 = mysql_query($query3, $db);
    $result4 = mysql_query($query4, $db);
    $result5 = mysql_query($query5, $db);
    $result6 = mysql_query($query6, $db);
    $result7 = mysql_query($query7, $db);
    $result8 = mysql_query($query8, $db);
    $result9 = mysql_query($query9, $db);

    // prepara la classifica
    $tab[][];
    $index = 0;
    while (
    $line1 = mysql_fetch_array ($result1))
    {
    // in cella 0 il nome della squadra
    $tab[$index][0] = $line1['nome_squadra'];

    // in cella 1 il punteggio
    $line2 = mysql_fetch_array ($result2);
    $line3 = mysql_fetch_array ($result3);
    $line5 = mysql_fetch_array ($result5);
    $line6 = mysql_fetch_array ($result6);
    $tab[$index][1] = 3 * ($line2['vinte'] + $line5['vinte']) + $line3['pari'] + $line6['pari'];

    // in cella 2 il numero di partite vinte
    $tab[$index][2] = $line2['vinte'] + $line5['vinte'];

    // in cella 3 il numero di partite pari
    $tab[$index][3] = $line3['pari'] + $line6['pari'];

    // in cella 4 il numero di partite perse
    $line4 = mysql_fetch_array ($result4);
    $line7 = mysql_fetch_array ($result7);
    $tab[$index][4] = $line4['perse'] + $line7['perse'];

    // in cella 5 il numero di reti segnate
    $line8 = mysql_fetch_array ($result8);
    $line9 = mysql_fetch_array ($result9);
    $tab[$index][5] = $line8['segnate'] + $line9['segnate'];

    // in cella 6 il numero di reti subite
    $tab[$index][6] = $line8['subite'] + $line9['subite'];

    // prossimo giro...
    $index++;
    }

    // adesso riordina la classifica per punteggio (qui si può fare di meglio...)
    for ($i = 0; $i < $count ($tab); $i++)
    {
    $max = $i;
    for (
    $j = $i + 1; $j < count ($tab); $j++)
    if (
    $tab[$j][1] > $tab[$max][1])
    $max = $j;
    if (
    $i != $max)
    {
    $temp = $tab[$max];
    $tab[$max] = $tab[$i];
    $tab[$i] = $temp;
    }
    }

    // finalmente, stampa la classifica!
    echo ('<TABLE><TR><TH>Squadra</TH><TH>Punti</TH><TH>Vinte</TH><TH>Pari</TH><TH>Perse</TH><TH>Reti segnate</TH><TH>Reti subite</TH></TR>');
    for (
    $i = 0; $i < count ($tab); $i++)
    {
    echo (
    '<TR>');
    for (
    $j = 0; $j < count ($tab[$i]); $j++)
    echo (
    '<TD>' . $tab[$i][$j] . '</TD>');
    echo (
    '</TR>');
    }
    echo (
    '</TABLE>');
    ?>
    Io l'ho buttato lì questo script (quindi non ti garantisco che funzioni), come puoi vedere non hai NESSUNA DIPENDENZA tra dati, ma ti servono ben 9 query per stampare la classifica completa... forse qualche ridondanza ti aiuterebbe a ridurre il numero di query...

    Stammi bene...
    Ultima modifica di dementialsite : 28-02-2006 alle ore 12.03.26 Motivo: ... ho dimenticato la stampa! :-D
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •