php
  • sql
  • 2013-05-26 48 views 0 likes 
    0

    所以我試圖使每個用戶名獨特的熱門計數器。MYSQL點擊計數器

    我想讓它如此,如果用戶名不在數據庫中,它會將用戶名插入到名爲username的字段中,並將1作爲點擊量插入到名爲click的東西中。

    如果用戶名已經存在,我希望它添加一個到現有的點擊值。我試圖讓它不區分大小寫。但是,它似乎沒有工作!

    $query = mysql_query("SELECT * FROM clicks WHERE username='$ytusernamecheck'"); 
    
        $numrows = mysql_num_rows($query); 
    
        if ($numrows < 0) 
        { 
         mysql_query("INSERT INTO clicks (username, clicks) 
                 VALUES ('$ytusernamecheck', 1)"); 
         echo $numrows; 
    
        } 
        else{} 
    
    +0

    究竟是什麼_「不工作」 _?請更具體一些。 – Kai

    回答

    0

    你應該做的是在username上創建一個唯一的索引,而不是使用this;

    -- first do: CREATE UNIQUE INDEX ix_clicks ON clicks(username); 
    
    INSERT INTO clicks VALUES ('username', 1) 
        ON DUPLICATE KEY UPDATE clicks = clicks + 1; 
    

    它會做的插入/更新在一個操作中不需要額外的數據庫查詢。

    An SQLfiddle to test with

    1

    有在此行中兩個錯誤:

    if ($numrows = '') 
    
    1. 您正在分配(=),而不是比較值(=====)。
    2. mysql_num_rows()返回一個整數,而不是一個空字符串。

    你最後的結果應該是這樣的:

    if ($numrows === 0) 
    

    僅供參考,you shouldn't use mysql_* functions in new code。他們不再維護and are officially deprecated。請參閱red box?請改爲了解prepared statements,並使用PDOMySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial

    +1

    對不起,我可能會失明。他在哪裏如果($ numrows ='') – Drew

    +1

    他們在發佈我的答案後編輯他們的帖子。當他們這樣做的時候很煩人。 –

    +0

    任何人都願意說,當它沒有從我這裏得到讚揚時,就編輯了某個特定的聲音!所以+1作爲正確的答案 – Drew

    0

    爲什麼不設置在用戶名字段的唯一密鑰,並用這個代替

    mysql_query("INSERT INTO clicks (username, clicks) VALUES ('$ytusernamecheck', 1) 
    on duplicate key update clicks=clicks+1"); 
    

    只有1 SQL語句來執行這樣

    相關問題