php
  • sql
  • 2013-05-26 47 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语句来执行这样

    相关问题