saitek a identificat clar problema: din cele doua variante date de tine, in mod sigur prima e corecta, intrucat aceea iti face interogarea din tabela, in timp ce a doua iti va returna ori un result set gol, ori un result set plin cu stringurile 'camp1' si 'camp2', in functie de valoarea lui $valoare (daca este diferita de, respectiv egala cu 'camp1'). Adica trebuia sa folosesti ` nu '.
Trecand peste acest aspect, si intelegand exact la ce te referi, eu unul nu am facut teste de performanta sa vad daca interogarea dupa `camp` e mai rapida decat interogarea dupa camp. In mod normal ar fi cat de cat logic, in conditiile in care cauti dupa camp MySql ar trebui sa caute printre variabilele declarate local daca exista vreuna cu numele respectiv, insa daca nici una nu e declarata, asta n-ar trebui sa il afecteze sensibil la nivelul performantei. Mie personal nu-mi plac `` si evit sa le folosesc, de aceea imi aleg numele campurilor/tabelelor folosind _ ca divider, tocmai pentru a nu fi nevoie sa le folosesc.
Referitor la razboiul dintre mysql_num_rows si count(*), teoretic razboiul e castigat de count(*). De ce? Pai gandeste-te la nivel de core ce se intampla in cazul unui:
Cod: Selectaţi tot
$res = mysql_query('SELECT * FROM tabela');
echo mysql_num_rows($res);
MySql citeste toate inregistrarile din tabela (adica continutul lor complet), i le paseaza php-ului care creeaza structurile de date necesare si le stocheaza in memorie. Dupa aceea, la apelul mysql_num_rows(), php-ul numara cate astfel de structuri are stocate in memorie (din cate stiu eu e vorba de o lista simplu inlantuita, deci pentru a afla numarul lor trebuie parsata toata lista) si returneaza rezultatul.
In cazul lui:
Cod: Selectaţi tot
$res = mysql_query('SELECT COUNT(*) FROM tabela');
echo mysql_result($res, 0)
treaba se intampla asa: din nou, MySql citeste toate inregistrarile din tabela, fara a-l interesa continutul, ci doar existenta lor, retine un numar si i-l paseaza php-ului. Acesta primeste o valoare (adica maxim 8 octeti) si ii stocheaza in memorie. Dupa care, la mysql_result, acesti 4/8 octeti sunt cititi, convertiti in string si afisati.
Concluzie: cu mysql_num_rows MySql-ul lucreaza ceva mai putin, insa PHP-ul lucreaza muuuult mai putin, atat din punct de vedere al procesarii, cat si al memoriei ocupate.