2012-01-29 10 views
9

Se il tuo unico obiettivo è controllare se esiste una riga in php (vero o falso), qual è il modo migliore per farlo?Quindi qual è il modo migliore per verificare se esiste una riga? ESISTE, COUNT o num_rows?

Opzione 1?

$result = mysql_query("SELECT * FROM users WHERE id = '1'"); 
$num_rows = mysql_num_rows($result); 

if ($num_rows == 1) 
    // one user, like it should be. 

else 
    // do something else 

Opzione 2?

$query = mysql_query("select count(1) from users where id = 1") 

if (mysql_result($query, 0) == 1) 
    // one user, like it should be. 

else 
    // do something else 

Opzione 3? opzione

$query = mysql_query("something like SELECT EXISTS(SELECT */1/COUNT(*)/etc. ...)") 

if (mysql_result($query, 0) == 1) 
    // one user, like it should be. 

else 
    // do something else 

Beter 4?

tu lo chiami.

Subquestions

  • COUNT(*), COUNT(1) or COUNT(id)?
+1

possibile duplicato di [SQL ottenere l'ottimizzazione conteggio delle righe] (http://stackoverflow.com/questions/8852753/sql-getting-row-count-optimization) – mario

+0

@mario: È correlato ma non è lo stesso. Qui viene chiesto di scoprire se count = 0 o> 0, non il conteggio esatto. –

+1

@ypercube: gli altri duplicati collegati qui lo coprono. E più esistono sul problema COUNT vs EXISTS, http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – mario

risposta

5

opzione 3 è il modo più veloce per verificare se esiste una riga se si utilizza MySQL:

$query = mysql_query("SELECT EXISTS(SELECT 1 FROM users WHERE id = 1)") 

if (mysql_result($query, 0) == 1) 
    // one user, like it should be. 

else 
    // do something else 
1

Il EXISTS è più veloce di SELECT COUNT(*) perché la ricerca secondaria interrompe la ricerca quando trova una riga. Non dovrà trovarli tutti e contarli. Si restituirà 0 o 1:

SELECT EXISTS 
     (SELECT * FROM ...) 
+0

Ho ragione nel capire che avrò ancora bisogno di usare 'mysql_result'? E la stessa domanda qui: qualsiasi vantaggio nell'uso di "SELECT COUNT (*) ..." ',' 'SELECT COUNT (1) ...' 'o' 'SELECT COUNT (id) ...' '? – SuperSpy

+0

Il link di Mario spiega le differenze. 'COUNT (*)' è in genere più veloce di 'COUNT (NotNullColumn)'. 'COUNT (NullableColumn)' produce un risultato differnet. –

+0

regola generale su qualsiasi rdbms è che EXISTS è il modo più veloce per andare, non solo MySQL – Cruachan

3

Penso che la domanda si riferisce più il codice stesso, allora il tempo necessario, in modo da utilizzare la sua interrogazione:

$result = mysql_query("SELECT * FROM users WHERE id = '1'"); 
//if result not returned(false) from Mysql return False Else True 
//This is just example and you can do anything you need in side the if() 
if(!$result) { 
//or return some error or redirect to another piece of code 
return FALSE; 
} else { 
//or do some other php/mysql magic 
//if there is a result you have the row to work with of needed 
return TRUE; 
} 

mysql_query
.. .excerpt dal manuale PHP Valori di ritorno

Per SELEZIONA, MOSTRA, DESCRIVERE, SPIEGARE e altre istruzioni che restituiscono r esultset, mysql_query() restituisce una risorsa in caso di successo o FALSE nell'errore .

Per altri tipi di istruzioni SQL, INSERT, UPDATE, DELETE, DROP, ecc. mysql_query() restituisce TRUE in caso di esito positivo o FALSE in caso di errore.

Problemi correlati