我有一个这样的表:
我在链接中使用别名 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']."' ");
}
}
最佳答案
这就是您的代码似乎正在做的事情:
- 从
table
中获取所有行,并指定 IDrange
- 对于每一行,获取别名
- 获取每个别名的行数,检查它是否大于 1
- 如果行数大于 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/