Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746

    [MYSQL] incremento che non va con REPLACE

    vorrei inserire il numero di visite ad una pagina in db suddivise per giorni quindi ho creato la seguente tabella:
    codice:
    CREATE TABLE `stat_giorni` (
      `data` date NOT NULL default '0000-00-00',
      `visite` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`data`)
    ) TYPE=MyISAM;
    quando l'utente entra nella pagina attiva la seguente query:
    Codice PHP:
    mysql_query
    REPLACE stat_giorni
    SET 
    data = NOW(),
    visite = visite + 1 " 
    $connessione_db ) ; 
    Incrementa solo ad un nuovo inserimento, mentre se 'data' è lo stesso non lo fa. REPLACE, in caso di valore già esistente non dovrebbe funzionare come UPDATE o mi sfugge qualcosa?
    Errare humanum est, perseverare ovest

  2. #2
    REPLACE non funge come un UPDATE, altrimenti che ci starebbe a fare?

    REPLACE agisce secondo questo meccanismo:

    Se viene trovato un record che abbia la chiave primaria oppure una chiave UNIQUE identica al record che si vuole inserire, cancella il record corrispondente e lo riscrive con i nuovi dati assegnando pure un nuovo id autoincrement se questo fosse presente.

    Nel caso il record non trovasse riscontro ne viene inserito uno nuovo.

    Per sapere se ha agito come aggiornamento oppure come inserimento devi verificare le righe modificate con mysql_affected_rows:

    Se sono due ha cancellato e riscritto, se la riga e' una ha solo inserito.

    Detto questo la tua query come replace non puo' funzionare perche' manca del riferimento alla chiave unica o ad un indice UNIQUE. Sicuramente la data non sara' uno di questi due nel senso che ti fornisce anche i secondi. Meglio usare CURDATE()


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    ho provato impostando il campo data sia come chiave primaria sia come unica ed in entrambi i casi fino a prima di mezzanotte non creava un nuovo record mentre dopo la mezzanotte ha aggiunto regolarmente il giorno, evidentemente non incrementa in quanto appunto prima la cancella, quindi cosa rimane da fare, estrarre prima il numero di visite, incrementarlo tramite php è reinserirlo?
    Errare humanum est, perseverare ovest

  4. #4
    rileggendo il tuo post con piu' attenzione mi viene da chiederti...

    Ma perche' non fai una tabella con tutti i santi giorni del calendario. Con 365 record per anno ... scrivi 3650 record con data progressiva e fai tutti update e sei a posto per i prossimi 10 anni.
    codice:
    for ($i=0; $i<=3655; $i++ ) {
    
    INSERT INTO stat_giorni 
    SET data = CURDATE() + interval $i day
    e vissero felici e contenti.... con un update.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Originariamente inviato da piero.mac
    Sicuramente la data non sara' uno di questi due nel senso che ti fornisce anche i secondi. Meglio usare CURDATE()
    ma DATE non restituisce anno-mese-giorno ? non è mica DATETIME
    Errare humanum est, perseverare ovest

  6. #6
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Originariamente inviato da piero.mac
    rileggendo il tuo post con piu' attenzione mi viene da chiederti...

    Ma perche' non fai una tabella con tutti i santi giorni del calendario. Con 365 record per anno ... scrivi 3650 record con data progressiva e fai tutti update e sei a posto per i prossimi 10 anni.
    codice:
    for ($i=0; $i<=3655; $i++ ) {
    
    INSERT INTO stat_giorni 
    SET data = CURDATE() + interval $i day
    e vissero felici e contenti.... con un update.

    E NO...
    la tabella conterrà sempre e solo gli ultimi 365 giorni con le relative visite, x gli anni c'è nè un'altra.
    Errare humanum est, perseverare ovest

  7. #7
    Originariamente inviato da carlo2002
    E NO...
    la tabella conterrà sempre e solo gli ultimi 365 giorni con le relative visite, x gli anni c'è nè un'altra.
    Poi una con le settimane, una con i santi patroni, una per chi usa FX, un'altra per IE... Mi pare una cosa fuori di melonio....

    Se DATE scrive YYYY-MM-DD cose' YYYY l'inno delle pubenda ritorte?


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    si, forse devo spiegare meglio cosa mi frulla nella testina:

    come avrai capito voglio contare gli accessi ad una pagina, quello che mi interessa è conoscerne la quantità nell'ultimo anno,semestre,mese,settimana a partire dal giorno attuale. Per fare questo uso una tabella che contiene le visite dalla data attuale a ritroso fino alla distanza di un anno e le date che lo superano vengono cancellate. Nel contempo viene aggiornata anche un'altra tabella che tiene conto delle visite anno per anno (e quindi il totale storico) che è un discorso diverso da quello precedente. come ben saprai non riesco a vivere felice senza partorire queste idee malsane, cercavo solo una soluzione semplice ed elegante per non finire nei miei soliti guazzabugli
    Errare humanum est, perseverare ovest

  9. #9
    carlo... uno dei primi suggerimenti (molto piu' di un suggerimento) nel progettare un database e' quello di evitare i "campi calcolati". Cioe' non dovrebbe MAI esistere in una tabella un campo che sia il risultato di una qualunque espressione di dati contenuti in altri campi presenti nella stessa o altre tabelle.

    Le ragioni sono parecchie e comprensibili. Una tabella non e' un foglio elettronico ma un magazzino di dati organizzati.

    In una statistica anche un campo con zero accessi e' un dato importante. Nel tuo contesto zero accessi no party. Dovrai quindi contare per conto tuo i giorni con zero accessi che dovranno ben fare parte di un periodo. Oppure la statistica sarebbe fasulla.

    Es.: gli accessi degli ultimi 30 giorni. Con zero accessi andresti a prendere un periodo sconosciuto e imprevedibile (che siano fatte cosi' le statistiche dell'ISTAT?). Vedi tu comunque. Io sono democratico e quello che ritengo sia meglio lo impongo solo a me stesso.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    appunto per quegli eventuali zero accessi pensavo di lavorare con il campo data, anche se dei giorni non venissero inseriti posso sempre fare una query che mi chieda tutti i record vanno da oggi ad un mese fa, sommare i valori del campo visite ed ottenere il risultato voluto.
    Non ci sono campi calcolati, anche la tabella che tiene conto degli anni segue un incremento indipendente da quella dei giorni.
    La tua democraticità è sempre stata indiscutibile, sono io che mi impunto su certe idee e finchè non svengo continuo a sbattere contro il muro.
    Errare humanum est, perseverare ovest

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.