Newsgroup: it.comp.www.php
Titolo: problema di query

Ciao a tutti,
ho un database mysql con diversi record contenenti un numero elevato di
campi, in che modo posso risolvere il seguente problema:
Ho un record A allora:
  --> Se A esiste ed è uguale a un record già presente nel database allora
ignora inserimento e rileva il campo ID del record nel database
ALTRIMENTI
 --> Se A non esiste oppure se esiste è diverso da un record già presente
nel database allora inserisci A nel database.
Grazie in anticipo a chi mi può aiutare.
Cooper.
PS: Si supponga che il nome del db sia:   NOMEDB e il nome della tabella
sia: NOMETAB.
-- 
[web:]  
http://www.blueware.it
 (aggiornato!)
[icq:]  146 781 935
[msn:] 
coo...@blueware.it
 


intanto dovresti inserire un indice di univocità nel campo_a:
ALTER TABLE `nometab` ADD UNIQUE ( `campo_a` ) oppure
ALTER TABLE `nometab` ADD PRIMARY KEY ( `campo_a` )
così puoi inserire solo valori non univoci nel campo_a.
Con
INSERT IGNORE INTO nometab ...
fai in modo che mysql salti automaticamente l'inserimento una chiave univoca
duplice e eviti l'output dell'errore e il tuo script continua a funzionare.
Francesco Duca
http://www.goldenweb.it



Non ho capito, cmq se mi sono espresso male, provo a rispiegarmi meglio.
Ho una tabella, con chiave primaria, indice e campi. Ho dei dati che devo 
inserire tramite una INSERT INTO.
Quello che voglio fare è un controllo per evitare che nella tabella siano 
presenti record uguali.
Cosi, se la query di inserimento che sto per fare è già stata fatta in 
precedenza questa viene ignorata, mentre se non è mai stata fatta in 
precedenza allora procede nel farla e quindi procede nell'inserire il nuovo 
record nella tabella.
Quello che chiedo (anche per capire meglio) è il codice (o la query MySQL) 
che effettuare per ottenere il risultato di sopra.(ovviamente completa).
Grazie in anticipo,
Cooper.



perfetto. Questa lasciala così com'è.
Adesso aggiungi una chiave unica ai campi che debbano essere unici (non
molti comunque - uno o due).
ALTER TABLE `nometab` ADD UNIQUE ( `campo_a` ) ecc.
e poi nelle query di INSERT INTO, sostituisci con INSERT IGNORE INTO
Se vuoi verificare che la query è stata eseguita o meno puoi usare
mysql_affected_rows(); per ogni insert, se non restituisce 0 la query è
stata eseguita con successo.
Con INSERT IGNORE se inserisci nei campi PRIMARY KEY o UNIQUE un valore già
inserito la query non viene eseguita. Se metti solo INSERT e si verifica
questo caso ti dà errore.
Se invece il discorso di univocità riguarda tutti i campi, è un po' più
complesso.
Tuttavia potresti creare una tabella ad hoc (query_log) dove logghi tutte le
query di insert eseguite e al momento di eseguire un' altra query di insert,
controlli che non sia gia presente nella tabella query_log.
Sappi comunque che se esegui numerose query di insert, il controllo sulla
tabella query_log potrebbe rallentare l'esecuzione di mysql
Agneddru e sucu...
Francesco Duca
http://www.goldenweb.it


Un attimo è qui il problema. Mi spiego meglio, io vorrei procedere per 
confronto di record ad esempio:
Se A = B allora IGNORA altrimenti INSERISCI quindi RESTITUISCI ID di B
dove A è il potenziale record che andrebbe inserito nella tabella mentre B è 
un record già presente nella tabella.
Che succede allora, che se A=B è vera, l'ID restituito deve essere quello 
associato a B.
Ti ringrazio ancora se puoi darmi ulteriori delucidazioni.



Prego,
A presto.
Chi ddiiici...

Ok ho risolto, ora quest'altro problema:
Con l'istruzione:
$row = mysql_num_rows(mysql_query('SELECT * FROM `nometabella`;'));
dove $row contiene il numero di righe contenute in una tabella. Come devo 
scrivere la query affinchè mi legga il campo ID della riga $row ?
Grazie in anticipo,
Cooper.
