Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    10

    problema con il set di variabili contenenti la where

    buon giorno a tutti....
    io ho un problemino con la query che setta le variabili che poi mi serviranno per un calcolo successivo...
    non riesco a settare le variabili facendo la where...in quanto la nuova @variabile non appartiene ad alcuna tabella. però io devo fare riferimento con una join alla tabella utenti dove ho le condizioni necessarie per effettuare il calcolo.
    ora vi chiedo.. devo creare una tabella ed inserire il valore di avg e std e poi confrontare le tabelle?? oppure c'e un modo di settare la nuova variabile senza modificare i dati della tabella base?
    se non effettuo la where nel settaggio variabili il programma funziona perfettamente
    grazie per l'aiuto


    SET @avg_errori_riflesso = (select avg(errori),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');

    SET @std_errori_riflesso = (select std(errori),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');


    SET @avg_tempo_tocco_lento_riflesso = (select avg(tempo_tocco_lento),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');

    SET @std_tempo_tocco_lento_riflesso = (select std(tempo_tocco_lento),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');





    SET @avg_tempo_tocco_veloce_riflesso = (select avg(tempo_tocco_veloce),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');

    SET @std_tempo_tocco_veloce_riflesso = (select std(tempo_tocco_veloce),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');



    SET @avg_tempo_tocco_medio_riflesso = (select avg(tempo_tocco_medio),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');

    SET @std_tempo_tocco_medio_riflesso = (select std(tempo_tocco_medio),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');




    select @avg_errori_riflesso, @std_errori_riflesso;
    select @avg_tempo_tocco_lento_riflesso, @std_tempo_tocco_lento_riflesso;
    select @avg_tempo_tocco_medio_riflesso, @std_tempo_tocco_medio_riflesso;
    select @avg_tempo_tocco_veloce_riflesso, @std_tempo_tocco_veloce_riflesso;


    select ((50 +10*(errori - @avg_errori_riflesso) / @std_errori_riflesso) +
    (50 +10*(tempo_tocco_lento - @avg_tempo_tocco_lento_riflesso) / @std_tempo_tocco_lento_riflesso) +
    (50 + 10*(tempo_tocco_medio - @avg_tempo_tocco_medio_riflesso) / @std_tempo_tocco_medio_riflesso) +
    (50 + 10*(tempo_tocco_veloce - @avg_tempo_tocco_veloce_riflesso) / @std_tempo_tocco_veloce_riflesso)) /4,
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F';

  2. #2
    1. non ho capito niente
    2. come da regolamento indica con quale db stai lavorando

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    10
    il db è mysql...
    in poche parole dovrei fare un SET (quindi creare una variabile) che contenga il valore medio riferito a dati inseriti in un altra tabella.
    ho problemi con la join....
    come indicato sopra devo inserire in @variabile la media per colonna, ma calcolata solamente per la fascia di eta e il sesso indicati dalla WHERE...
    ho reso l'idea???

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Se devi assegnare il risultato della tua query ad una variabile, la query ti dovrà ovviamente restituire un solo risultato (una sola riga con una sola colonna)...
    Nella tua query, oltre alla media di un valore (o la deviazione standard) ti fai restituire anche un "partite_id", "utenti.id"... cosa c'entrano ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    10
    vorrei che il calcolo della media e deviazione standard venisse calcolato solo per la condizione indicata dalla WHERE.

    SET @avg_errori_riflesso = (select avg(errori),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F');

    se eseguo il comando soprastante ho come output:
    Error Code: 1241. Operand should contain 1 column(s)

    ma se eseguo:

    select avg(errori),
    riflesso.partite_id, utenti.id from riflesso join utenti on riflesso.partite_id = utenti.id
    WHERE data_di_nascita < NOW() AND data_di_nascita > date_sub(NOW(), INTERVAL 9000 DAY) and sesso= 'F'

    nonchè la query senza il set funziona....il problema e che questo risultato dovrò inserirlo in un altra formula e se non lo assegno ad una variabile non mi effettua il calcolo.
    ho provato a fare.. valore - avg(valore)... ma non funziona...
    quindi ho pensato che se riesco settare una variabile contenente la media del valore posso ottenere il mio risultato da una semplice differenza fra variabili...
    qualcuno ha idee???

  6. #6
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    E' appunto quello che ti ho detto...
    La tua query restituisce 3 valori: "avg(errori)", "riflesso.partite_id" e "utenti.id" e quindi non puoi assegnarli ad UNA variabile (e l'errore ti dice proprio che se vuoi assegnare il risultato della query ad UNA variabile devi avere UN risultato)
    Se esegui la query senza il set funziona correttamente ma il risultato è un record di una riga e 3 colonne... come fa lui a sapere quale di queste 3 colonne deve asegnare alla variabile che vuoi settare ?
    La where non c'entra niente (ed infatti nella seconda query ottieni il risultato che vuoi).

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    10
    funziona...
    scusa per la ripetizione
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.