创建新表的MySql语句仅在限制少于100k条目时才有效

时间:2011-08-17 20:31:46

标签: mysql

如果我将query1限制为100k,则此脚本将创建一个新表,但如果我尝试传输所有300k条目,它将失败而不会出现错误。有什么建议吗?

$query1 =  "SELECT DISTINCT city, region FROM geolocations";
$result = mysql_query($query1);
while ($row = mysql_fetch_assoc($result)) {
    //create array of ids to select from DB
    $id_arr[] = $row['location_id'];
}

mysql_free_result($result);     

//join the array to create SELECT statement 
$ids = join(',',$id_arr);  
//create new table using data associated with locations_ids in id_arr
$query2 = "CREATE TABLE clean_gls SELECT * FROM geolocations WHERE location_id IN ($ids) "; 
mysql_query($query2);

3 个答案:

答案 0 :(得分:1)

正如Mat所说,你的代码似乎缺少一些东西,但是你应该真正考虑使用连接或子查询来生成你的位置id数组,以便所有处理都由服务器完成。

编辑:

所以,我仍然不明白你是如何从原始查询中获取location_id的,但也许这会做你想要的:

CREATE TABLE clean_gls (PRIMARY KEY (city, region)) IGNORE SELECT * FROM geolocations

如果IGNORE不是您想要的,请尝试REPLACE

答案 1 :(得分:0)

如前所述,您的原始代码存在问题:

  • 您没有选择location_id,因此您无法创建数组 LOCATION_ID
  • 为什么要将所有这些ID都移到php中才能通过 他们回到mysql?

如果您尝试将不同的城市和区域组合放入新表中,则使用类似于以下内容的单个数据库执行来执行此操作:

CREATE TABLE clean_gls
SELECT DISTINCT city, region
FROM geolocations

答案 2 :(得分:0)

此查询有效我想选择不同的城市,区域组合,并将其与新表中的关联数据分组。

CREATE TABLE clean_gls SELECT * FROM geolocations GROUP BY city, region;