php - 如果现有 mysql 数据重复或更多,如何编辑 "unique"

标签 php mysql sql mysqli unique

我有一个这样的表:

enter image description here

我在链接中使用别名 http://www.yoursite.com/ALIAS

所以它们必须是独一无二的。

但是我有近 100 万行,这就是为什么当我使用下面的代码时,需要花费很多时间,并且站点关闭。

顺便问一下,你对我有什么建议?

非常感谢。

$sql2="SELECT id,adi,alias from firma where id>1400 and id<100000 and onay=0 ";
    $gor=mysqli_query($i_link,$sql2);
    while($sonuc=mysqli_fetch_row($gor))
    {
        $alias=$sonuc['2'];
        $ee="SELECT id from firma where alias='".$alias."' ";
        $says=mysqli_query($i_link,$ee);
        $say=mysqli_num_rows($says);
        if($say>1) 
            {
                $r=rand(0,999);
                $aliasy=$alias."-".$r;
        mysqli_query($i_link,"UPDATE firma SET alias='".$aliasy."' WHERE id='".$sonuc['0']."' ");

            }
        }

最佳答案

这就是您的代码似乎正在做的事情:

  1. table 中获取所有行,并指定 ID range
  2. 对于每一行,获取别名
  3. 获取每个别名的行数,检查它是否大于 1
  4. 如果行数大于 1,则更新别名以随机数为前缀的行

步骤 1 到 3 有点多余,因为您要重新获取相同的数据,我建议仅获取那些出现多次的别名并更新它们。下面是获取所有此类别名的示例查询:

SELECT alias, GROUP_CONCAT(id)
FROM test
WHERE id >= 1 AND id <= 335003
GROUP BY alias
HAVING COUNT(*) > 1;

此查询将为您提供多次出现的别名,然后您可以迭代这些别名,获取 id 并更新相应的记录。这将为您节省一次迭代并使应用程序更快。

这是SQL Fiddle

关于php - 如果现有 mysql 数据重复或更多,如何编辑 "unique",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42123739/

相关文章:

php - 从三个表中进行 SQL SELECT,并在投票系统中进行排序

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '$Valuess' in 'field list' '

php - 减少一些 MYSQL 结果。

javascript - 从 JavaScript 返回数据到 Servlet?可能的?

mysql - 查找名字/姓氏交换的重复用户

java - JCalendar - 使用正确的格式在 Java 中正确设置日期

php - Angular HTML5 模式,路由器将在页面重新加载时进行其他说明

javascript - 如何在 javaScript 中获取父 div id?

mysql - Python3 中的 Django 数据库

sql - 如何为自引用表创建一个简单的 Select ?