|
|
|
|
Strumenti |
03-11-2007, 15:33 | #1 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1275
|
[C] mysql api
Volevo sapere se esiste tra le api del c di mysql (possibilmente 4) una funzione che restituisce true o false se esiste o meno un dato valore.
Adesso sto facendo in questo modo: select * from ciao where campo1 = valoreX limit 1 Se mi restituisce almeno un valore la funzione restituisce true altrimenti false. il problema è che questo sistema non è sicuramente il più veloce. Infatti quando le operazioni sono migliaia il programma è di una lentezza estenuante. Grazie |
04-11-2007, 19:01 | #2 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1275
|
up
|
08-11-2007, 07:52 | #3 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1275
|
up
|
08-11-2007, 08:22 | #4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
La questione principale è che con le API del MySQL (e questo varrebbe anche per altri DB, credo), puoi solamente eseguire delle query ed ottenere un "record-set". Per dirla in altri termini, non ci sono funzioni per sapere se esiste o meno un dato valore ... tutto passa attraverso una query SQL e attraverso l'utilizzo di un result-set (anche per altre informazioni .. non solo per i dati veri e propri). Se dici che quella query impiega molto tempo, posso pensare che 'campo1' non sia in chiave. Se lo fosse, sarebbe certamente molto molto più veloce.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
08-11-2007, 08:37 | #5 |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1275
|
Ok,grazie.
Non sapevo se il mio metodo fosse il più 'elegante' possibile. A quanto pare sì. Comunque ora ho un altro problema: La mia applicazione è multithread. Quando ogni thread inserisce dati nel database deve conoscere l'ID del dato che esso stesso ha inserito, e lo può sapere tramite mysql_insert_id() . Solo che quella funzione restituisce l'ID dell'ultimo dato immesso, che potrebbe essere quello immesso da un altro thread e non dallo stesso che usa mysql_insert_id() . Come potrei risolvere il problema ? Ciao Ultima modifica di das : 08-11-2007 alle 08:41. |
08-11-2007, 09:10 | #6 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Quote:
Comunque per quanto riguarda la query iniziale, io eseguireri Codice:
select count(*) from ciao where campo1 = valoreX |
|
08-11-2007, 10:23 | #7 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1710
|
Quote:
per il secondo perchè non un mutex ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
08-11-2007, 10:28 | #8 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
|
08-11-2007, 10:29 | #9 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1710
|
si ma è lui che scrive tramite i vari 3ds quindi potrebbe benissimo lockarli. Una scrittura alla volta
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
08-11-2007, 10:31 | #10 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
|
08-11-2007, 11:48 | #11 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1710
|
ovvio, ma davo per scontato che la tabella in questione la usasse solo lui
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
08-11-2007, 12:01 | #12 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Quote:
Chiunque, su qualunque tabella del database scriva, causa una modifica del valore restituito da mysql_insert_id(). Un pò troppo azzardata come ipotesi. |
|
08-11-2007, 12:06 | #13 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1710
|
a beh, bella funzione, utilissima direi
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
08-11-2007, 12:15 | #14 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Infatti è un difetto grosso come una casa di MySQL e sinceramente non capisco perchè non facciano una funzione ad hoc per risolvere il problema, non mi sembra una cosa molto complicata, oltretutto pensando alla basilarità dell'operazione.
|
08-11-2007, 12:29 | #15 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1710
|
è open source ... falla tu
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
09-11-2007, 16:22 | #16 | |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1275
|
Quote:
Prima inserisco il dato. Dopo vado a ricercarlo e leggo l'ID. Lento ma sicuro. Che tu sappia glia ltri database stile SQL non open, hanno lo stesso difetto ? |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:10.