Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    [mySQL] - Generare date casuali

    Ciao a tutti!!
    Ho provato ad eseguire il seguente codice per generare date casuali e inserirle nel campo 'Pubblicazione' delle righe della tabella Offerta, ma non riesco ad ottenere un risultato utile.

    codice:
    UPDATE Offerta
        SET Pubblicazione = DATE_SUB( NOW(), INTERVAL 86460*2345*RAND() SECOND);
    Ho provato sia settando il campo 'Pubblicazione' come timestamp che come datetime e in entrambi i casi lo script non aggiorna la tabella. Eppure se faccio qualcosa come
    codice:
    SELECT DATE_SUB( NOW(), INTERVAL 86460*2345*RAND() SECOND);
    ottengo dei risultati giusti.
    Dove sbaglio quindi?

    EDIT: 86460 è il numero dei secondi di un giorno (in media) e 2345 è il numero di giorni.

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: [mySQL] - Generare date casuali

    Originariamente inviato da tigerjack89
    Ciao a tutti!!
    Ho provato ad eseguire il seguente codice per generare date casuali e inserirle nel campo 'Pubblicazione' delle righe della tabella Offerta, ma non riesco ad ottenere un risultato utile.

    codice:
    UPDATE Offerta
        SET Pubblicazione = DATE_SUB( NOW(), INTERVAL 86460*2345*RAND() SECOND);
    Ho provato sia settando il campo 'Pubblicazione' come timestamp che come datetime e in entrambi i casi lo script non aggiorna la tabella. Eppure se faccio qualcosa come
    codice:
    SELECT DATE_SUB( NOW(), INTERVAL 86460*2345*RAND() SECOND);
    ottengo dei risultati giusti.
    Dove sbaglio quindi?

    EDIT: 86460 è il numero dei secondi di un giorno (in media) e 2345 è il numero di giorni.
    Ho provato su una mia tabella con il campo DATETIME e funziona il tuo script. Per verificare mi sono fatto una select order by campodata desc e vedo che le righe cambiano sempre

  3. #3
    Davvero? Beh a me non funziona con nessuno dei due domini
    Uso la versione 5.x (non ricordo precisamente quale però).

  4. #4
    Non funziona nemmeno se prova ad inserire qualcosa di semplice, tipo
    codice:
    UPDATE Offerta
    SET Pubblicazione = CURRENT_TIME;
    Non riesco a capire in cosa sbaglio

    EDIT: in realtà anche aggiornamenti su altri campi della tabella non riescono; non tutti però, alcuni funzionano alla perfezione. Può essere un problema di tabella corrotta?

    EDIT2: azz a quanto pare ora funziona solo inserendo anche la clausola where. Ma non era opzionale? E poi giuro che prima non funzionava nemmeno con quella :S

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da tigerjack89
    Non funziona nemmeno se prova ad inserire qualcosa di semplice, tipo
    codice:
    UPDATE Offerta
    SET Pubblicazione = CURRENT_TIME;
    Non riesco a capire in cosa sbaglio

    EDIT: in realtà anche aggiornamenti su altri campi della tabella non riescono; non tutti però, alcuni funzionano alla perfezione. Può essere un problema di tabella corrotta?

    EDIT2: azz a quanto pare ora funziona solo inserendo anche la clausola where. Ma non era opzionale? E poi giuro che prima non funzionava nemmeno con quella :S
    Davvero strano!
    Si la clausola WHERE è opzionale, se vuoi aggiornare tutti i record non la metti. Non so davvero cosa dirti, io uso la 5.5 e l'ho provata anche sulla 5.0. Boh davvero non saprei cosa dire. Non è che la tabella era lockata e non te la faceva aggiornare??

  6. #6
    Originariamente inviato da Joe Taras
    Davvero strano!
    Si la clausola WHERE è opzionale, se vuoi aggiornare tutti i record non la metti. Non so davvero cosa dirti, io uso la 5.5 e l'ho provata anche sulla 5.0. Boh davvero non saprei cosa dire. Non è che la tabella era lockata e non te la faceva aggiornare??
    Non l'ho capito, ho riavviato anche il computer e all'inizio non me la faceva aggiornare, poi di colpo mettendo la clausola where i risultati venivano aggiornati :S

    Comunque, ritornando in tema, sono riuscito ad aggiornare le date del campo Pubblicazione di Offerta; da esse, ho aggiornato le date di scadenza di tutte le offerte.
    A questo punto, vorrei aggiornare quelle del campo "Data acquisto" di Transazione, facendo in modo che anch'esse siano casuali e al massimo risalgano ad un giorno precedente.
    In pratica, ho due tabelle così formate
    Offerta(Codice offerta, Pubblicazione, Scadenza, ...)
    Transazione(Codice transazione, Offerta, Data acquisto, ...)

    Ho provato quindi il seguente codice, ma non va e vorrei capire se è un mio problema o no.

    codice:
    UPDATE Transazione
    SET `Data acquisto` =
    (
        SELECT DATE_SUB(O.Scadenza, INTERVAL 86000*RAND() SECOND)
        FROM Transazione T JOIN Offerta O ON T.Offerta = O.`Codice offerta`
    );

  7. #7
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da tigerjack89
    Non l'ho capito, ho riavviato anche il computer e all'inizio non me la faceva aggiornare, poi di colpo mettendo la clausola where i risultati venivano aggiornati :S

    Comunque, ritornando in tema, sono riuscito ad aggiornare le date del campo Pubblicazione di Offerta; da esse, ho aggiornato le date di scadenza di tutte le offerte.
    A questo punto, vorrei aggiornare quelle del campo "Data acquisto" di Transazione, facendo in modo che anch'esse siano casuali e al massimo risalgano ad un giorno precedente.
    In pratica, ho due tabelle così formate
    Offerta(Codice offerta, Pubblicazione, Scadenza, ...)
    Transazione(Codice transazione, Offerta, Data acquisto, ...)

    Ho provato quindi il seguente codice, ma non va e vorrei capire se è un mio problema o no.

    codice:
    UPDATE Transazione
    SET `Data acquisto` =
    (
        SELECT DATE_SUB(O.Scadenza, INTERVAL 86000*RAND() SECOND)
        FROM Transazione T JOIN Offerta O ON T.Offerta = O.`Codice offerta`
    );
    Non ti funzionerà mai perché MySql ha un grossissimo limite, non puoi fare una update di una tabella e la stessa usarla in una subquery. Tu fai update Transazione ma Transazione la usi anche nella from della sub select.

    Non capisco perché abbiano implementato questa assurdità!

  8. #8
    Originariamente inviato da Joe Taras
    Non ti funzionerà mai perché MySql ha un grossissimo limite, non puoi fare una update di una tabella e la stessa usarla in una subquery. Tu fai update Transazione ma Transazione la usi anche nella from della sub select.

    Non capisco perché abbiano implementato questa assurdità!
    Cacchio quindi praticamente devo scrivermeli tutti a mano?!??!? mmm... In effetti è un difetto bello grosso.
    Come posso ovviare quindi?

  9. #9
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da tigerjack89
    Cacchio quindi praticamente devo scrivermeli tutti a mano?!??!? mmm... In effetti è un difetto bello grosso.
    Come posso ovviare quindi?
    Quando devo fare una update del genere ovvio creandomi una temporary table e quindi faccio riferimento all'interno della query alla temporary table e non a quella reale. Ovviamente nella t.t. metterò anche meno colonne, ossia solo quelle che mi servono in modo da velocizzare la query

  10. #10
    Originariamente inviato da Joe Taras
    Quando devo fare una update del genere ovvio creandomi una temporary table e quindi faccio riferimento all'interno della query alla temporary table e non a quella reale. Ovviamente nella t.t. metterò anche meno colonne, ossia solo quelle che mi servono in modo da velocizzare la query
    Qual è la sintassi per creare la tabella temporanea da quella preesistente? Qualcosa del genere? E se invece non volessi copiare tutti i campi della tabella originaria ma solo alcuni?

    codice:
     
    CREATE TEMPORARY TABLE temp
    LIKE Transazione
    Grazie mille per l'aiuto

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.