php
  • mysql
  • 2012-01-29 12 views 9 likes 
    9

    Jeśli Twoim jedynym celem jest sprawdzenie, czy istnieje wiersz w php (prawda lub fałsz), jaki jest najlepszy sposób na zrobienie tego?Jaki jest najlepszy sposób sprawdzenia, czy wiersz istnieje? EXISTS, COUNT lub num_rows?

    Opcja 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 
    

    Opcja 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 
    

    Wariant 3?

    $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 opcja 4?

    możesz to nazwać.

    Subquestions

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

    możliwe duplikat [SQL coraz optymalizacji liczba wierszy] (http://stackoverflow.com/questions/8852753/sql-getting-row-count-optimisation) – mario

    +0

    @mario: Jest powiązany, ale nie taki sam. Tutaj jest pytanie, czy liczba = 0 lub> 0, a nie dokładna liczba. –

    +1

    @ypercube: Inne powielane tam łącza pokrywają to. I więcej istnieje w kwestii COUNT vs EXISTS, http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – mario

    Odpowiedz

    5

    Opcja 3 to najszybszy sposób, aby sprawdzić, czy istnieje wiersz jeśli używasz 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

    Numer EXISTS jest szybszy niż SELECT COUNT(*), ponieważ podzapytanie zakończy wyszukiwanie, gdy znajdzie jeden wiersz. Nie będzie musiał ich wszystkich znaleźć i policzyć. zwróci wartość 0 lub 1:

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

    Mam rację, rozumiejąc, że nadal będę musiał użyć 'mysql_result'? I to samo pytanie tutaj: jakakolwiek zaleta w użyciu "SELECT COUNT (*) ...", "SELECT COUNT (1) ..." lub "SELECT COUNT (id) ..."? – SuperSpy

    +0

    Link autorstwa mario wyjaśnia różnice. 'COUNT (*)' jest zwykle szybsze niż 'COUNT (NotNullColumn)'. 'COUNT (NullableColumn)' daje inny wynik. –

    +0

    ogólną zasadą na każdym rdbms jest to, że EXISTS to najszybsza droga, a nie tylko MySQL – Cruachan

    3

    Myślę, że pytanie dotyczy bardziej sam kod następnie czas zaangażowany, więc używając swojego zapytania:

    $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 od PHP manual Return Values ​​

    WYBIERZ, POKAŻ, OPISUJ, WYJAŚNIJ i inne zestawienia wracają r esultset, mysql_query() zwraca zasób po sukcesie lub FALSE w błędzie .

    W przypadku innych typów instrukcji SQL: INSERT, UPDATE, DELETE, DROP, itp., mysql_query() zwraca TRUE w przypadku sukcesu lub FALSE w przypadku błędu.

    Powiązane problemy