Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: Query impossibile

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    10

    Query impossibile

    Salve, chiedo scusa a tutti ma avevo postato sulla sezione php credevo fosse la sezione più adatta, il moderatore mi ha suggerito di postare qui mi scuso anche con luiper l'errore.
    Avrei bisogno di qualche suggerimento sulla costruzione di una query che ormai da giorni ci sto lavorando senza nessun risultato.
    Cerco di spiegare il problema nel modo più semplice possibile.
    In una tabella ho le seguenti colonne:
    Id - chiave primaria
    User_id - Nome utente
    Start - CURRENT_TIMESTAMP
    Fine - CURRENT_TIMESTAMP con l'attributo "on update CURRENT_TIMESTAMP"
    Durata - NULL
    La query che vorrei realizzare deve selezionare User_id se Durata è NULL e quindi fare Update su colonna Fine.
    Un passo in realtà l'ho fatto e funziona pure ed è la seguente query:
    UPDATE Nome_tabella SET fine = CASE WHEN duration = 'NULL' THEN NOW() ELSE fine END WHERE user_id IN (28).
    Ma resta un problema ho tantissimi user_id (28,29,30,31,32,32 ecc.) non mi sembra corretto aggiungerli tutti nella query in quanto sono davvero tanti.
    Il sistema dovrebbe capire in automatico chi è user_id e se vede che esiste deve aggiornare solo il record relativo a quell user_id.
    Ho provato con le strutture condizionali, anche con i trigger ma non ne vengo a capo nella costruzione della query.
    Qualche suggerimento?
    Grazie

  2. #2
    non ti basta

    UPDATE tabella SET fine=NOW() WHERE Duration = NULL

    ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    10
    Quote Originariamente inviata da optime Visualizza il messaggio
    non ti basta

    UPDATE tabella SET fine=NOW() WHERE Duration = NULL

    ?
    A me serve filtrare gli user_id
    Così come dici se passa user_id 28 mi aggiorna la riga anche del user_id 30 quella del 31 insomma di tutti quelli che ci sono.

  4. #4
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    =null per la cronaca non funziona

  5. #5
    Per come hai spiegato la cosa, la query corretta è quella suggerita da optime.
    Poi dipende su che database lavori, in Mysql = NULL si scrive IS NULL.

    A me serve filtrare gli user_id

    Perchè ?
    Così come dici se passa user_id 28...

    Passa da dove ?

    Spiega bene cosa devi fare.
    Ultima modifica di W Thunderbird; 13-11-2015 a 15:43

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    10
    Quote Originariamente inviata da W Thunderbird Visualizza il messaggio
    Per come hai spiegato la cosa, la query corretta è quella suggerita da optime.
    Poi dipende su che database lavori, in Mysql = NULL si scrive IS NULL.


    Perchè ?

    Passa da dove ?

    Spiega bene cosa devi fare.
    Grazie per il vostro interesse provo a rispiegare, sono talmente annebbiato ormai che ho sbagliato anche a scrivere la query e ho confuso pure voi.
    La query che mi sta funzionando in parte cioè, che non tiene conto di user_id è la seguente:
    UPDATE Nome_tabella SET fine = CASE WHEN duration = '00:00:00' THEN NOW() ELSE fine END WHERE user_id IN (28).
    Ma io non voglio questo, vorrei che quando digito sul browser:
    localhost/agg_data.php?user_id=28 inserisce sulla mia tabella, user_id=28, sul campo "start" e anche su quello "fine" data e orario corrente, e fin qua funziona benissimo.
    Se rilancio nuovamente localhost/agg_data.php?user_id=28 deve comportarsi da update, ecco spiegata la query "UPDATE Nome_tabella SET fine = CASE WHEN duration = '00:00:00' THEN NOW() ELSE fine END WHERE user_id IN (28)".
    Ma come vedete in questa query sto specificando che deve aggiornare solo user_id 28, volevo evitare di scrivere END WHERE user_id IN (28,29,30,31,32,33,34,35,36,37,38,39,40,41 ecc).
    In definitiva se ad esempio dal browser lancio il comando: localhost/agg_data.php?user_id=39,
    deve inserire una riga con gli orari correnti. se subito dopo rilancio lo stesso comando deve andare ad aggiornare la riga appena inserita.
    Una sorta di start e stop associato agli user_id.
    Spero che ho reso un pò meglio il concetto.
    Se avete qualche dubbio ditemelo che provo a spiegare quello che non è chiaro.

  7. #7
    ma scusa, che cavolo c'entra la IN() con TUTTI gli utenti? metti WHERE user_id=ID_PASSATO !!! E' un comando che devi prepararti da php

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    10
    Quote Originariamente inviata da optime Visualizza il messaggio
    ma scusa, che cavolo c'entra la IN() con TUTTI gli utenti? metti WHERE user_id=ID_PASSATO !!! E' un comando che devi prepararti da php
    Grazie per aver seguito il post, purtroppo non ci sto arrivando forse nella mia testa sto seguendo una logica che non mi fa vedere bene altre soluzioni.
    Parli di ID_PASSATO ma cos'è? devo forse inserire nel database un'altra colonna con nome ID_PASSATO?.
    Perdonami

  9. #9
    Quote Originariamente inviata da data30 Visualizza il messaggio
    Grazie per aver seguito il post, purtroppo non ci sto arrivando forse nella mia testa sto seguendo una logica che non mi fa vedere bene altre soluzioni.
    Parli di ID_PASSATO ma cos'è? devo forse inserire nel database un'altra colonna con nome ID_PASSATO?.
    Perdonami
    azz, annamo bbene!

    allora, ti arriva una richiesta

    localhost/agg_data.php?user_id=28

    dove l'id è 28. lo leggi tramite php (non so come si faccia, non conosco php) ma immaginiamo di memorizzarlo nella variabile USERID

    a questo punto costruisci una stringa sql di questo tipo

    stringaSql="
    UPDATE Nome_tabella SET fine = CASE WHEN duration = '00:00:00' THEN NOW() ELSE fine END WHERE user_id="+USERID

    e la esegui (stesso discorso di prima non so se con php le stringhe si costruiscono così, né come si lanciano)

    spero che il problema sia questo, perché mi pare di una banalità stratosferica



  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    10
    Quote Originariamente inviata da optime Visualizza il messaggio
    azz, annamo bbene!

    allora, ti arriva una richiesta

    localhost/agg_data.php?user_id=28

    dove l'id è 28. lo leggi tramite php (non so come si faccia, non conosco php) ma immaginiamo di memorizzarlo nella variabile USERID

    a questo punto costruisci una stringa sql di questo tipo

    stringaSql="
    UPDATE Nome_tabella SET fine = CASE WHEN duration = '00:00:00' THEN NOW() ELSE fine END WHERE user_id="+USERID

    e la esegui (stesso discorso di prima non so se con php le stringhe si costruiscono così, né come si lanciano)

    spero che il problema sia questo, perché mi pare di una banalità stratosferica


    Ecco perchè avevo postato nella sezione Php, ma evidentemente la discussione va in entrambi le sezioni.
    In ogni caso non ho ancora risolto.
    Io ho un file add_data.php e al suo interno ho scritto una query che fa l'insert e questo funziona, difatti mi stampa la riga su mysql con tutti i campi corretti.
    Poi ho una seconda query che è quella che ho già mensionato sopra ed è:
    "UPDATE Nome_tabella SET fine = CASE WHEN duration = '00:00:00' THEN NOW() ELSE fine END WHERE user_id IN (28)" questa deve servire a fare update del campo fine, ma mi funziona solo in parte e ripeto se passa user 28 funziona ma se passa user 35 non aggiorna.
    Poi ho una terza query e questa funziona bene pure che fa update del campo duration così da restituirmi il tempo trascorso di start e fine.

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.