Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Inserisci riga...che non c'è

    Ciao,
    sto indicizzando il mio sito in un DB MySQL facendo in modo che ogni volta che un file viene scaricato venga eseguita una query che crea o modifica la riga ad esso corrispondente (come chiave di riconoscimento userei il path completo del file...certamente unico !!).
    Domanda : come verifico se la riga esiste già e quindi devo fare solo un update oppure devo crearla ??

    N.B.: probabilmente esiste una funzione che fa al caso mio ma non la conosco...
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    sara' banale, ma l'unica e' fare una query SELECT preventiva. In pratica se (if) trovi una riga fai l'UPDATE altrimenti (else) fai l'INSERT.


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

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se il path è definito come PRIMARY_KEY (o anche solo come indice UNIQUE) puoi usare una REPLACE, che funziona come una INSERT se non trova la chiave e come una UPDATE se la trova

    http://dev.mysql.com/doc/mysql/en/REPLACE.html

  4. #4
    Uhm...mi sa che devo un po' studiarmi bene come funge 'sto REPLACE, altrimenti fa dei grossi casini !!
    Siccome lo vorrei usare per gestire una fotogallery :
    - se la foto non è ancora nel DB...ok la inserisce con tutti i dati al click dell'apertura in fullsize;
    - se la foto è già nel db dovrebbe semplicemente incrementare il contatore di click ed in caso mostrare altre opzioni sulla pagina interessata...!!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se la chiave è già presente nel db, REPLACE cancella la riga vecchia e inserisce la nuova.
    Se questo non ti va bene, fai come ha detto Piero

  6. #6
    UPDATE returns the number of rows that were actually changed. In MySQL 3.22 or later, the mysql_info() C API function returns the number of rows that were matched and updated and the number of warnings that occurred during the UPDATE.

    "UPDATE ritorna il numero di righe che sono state cambiate etc etc..."

    preso paro paro dal sito di mysql:
    http://dev.mysql.com/doc/mysql/en/UPDATE.html

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Tymba
    UPDATE returns the number of rows that were actually changed. In MySQL 3.22 or later, the mysql_info() C API function returns the number of rows that were matched and updated and the number of warnings that occurred during the UPDATE.

    "UPDATE ritorna il numero di righe che sono state cambiate etc etc..."

    preso paro paro dal sito di mysql:
    http://dev.mysql.com/doc/mysql/en/UPDATE.html
    ...e quindi??

  8. #8
    Originariamente inviato da piero.mac
    sara' banale, ma l'unica e' fare una query SELECT preventiva. In pratica se (if) trovi una riga fai l'UPDATE altrimenti (else) fai l'INSERT.

    Intanto grazie x tutte le risposte...

    Questa (quella di piero.mac) era l'idea che avevo inizialmente, ma non rallenta un po' lo script fare una "SELECT preventiva" ??
    (è dato x scontato che non ci saranno doppioni visto che la chiave è unica, ovvero il path completo del file !!)

    Avendo un buon numero di campi ed abbastanza pieni, anche l'idea di cancellare la riga vecchia ed inserirla nuova riportando i dati precedenti modificandone solo uno ne risulta in un grosso lavoro di lettura e scrittura e conseguente rallentamento del DB durante l'operazione !!

    Secondo voi quale delle due soluzioni è + efficiente ??
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.