Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Query ottimale?

  1. #1

    Query ottimale?

    Ciao a tutti

    Ho una tabella di nome "prova" con questi campi:
    - id (INT, autoinc, primary)
    - value (VARCHAR)
    - timefrom (DATETIME)
    - timeto (DATETIME)
    - hits (INT)

    1. Devo controllare se esiste una riga dove "value=$miovalore" e $miadata si trovi fra timefrom e timeto
    2. Se esiste, faccio un semplice hits=hits+1, altrimenti creo un nuovo record con hits = 1

    Con REPLACE o con ON DUPLICATE KEY non si può fare non potendo avere valori UNIQUE (value, timefrom e timeto devono potersi ripetere)

    Ho provato almeno per l'update la seguente query:
    UPDATE prova SET hits=hits+1 WHERE id = (SELECT id FROM (SELECT id FROM prova WHERE value='$miovalore' AND $miadata BETWEEN timefrom AND timeto) AS x)
    Devo utilizzare il secondo SELECT poiché non è possibile utilizzare come riferimento la stessa tabella in un UPDATE

    Avete qualche idea su come migliorare la query o adirittura fare l'inserimento se non esiste un record con value=$miovalore?

    Grazie

  2. #2
    Potresti fare tutto in una unica operazione se puoi crearti una stored procedure, in questo modo eviti pure traffico ridondante tra il client e il server. Ti serve MySQL 5 però.

    http://dev.mysql.com/doc/refman/5.1/...procedure.html
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

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.