更新MySQL中的所有记录
我目前有一个17列宽的表,有30个记录。更新MySQL中的所有记录
基本上,它是从另一个网站的表中,我刮,然后插入MySQL表。
$html = str_get_html($newHTML); // get the HTML
$tdContents = ""; // declare variable
$rowArray = array(); // declare array for records
for ($j = 0; $j < 510; $j++) // loop through each TD element, 17 columns by 30 records so 510
{
$f = $html->find("td",$j); // get the td elements from the html
$tdContents = $f->innertext; // get the text inside the td
$rowArray[] = $tdContents; // store that text inside the array
if ($j == 16 || $j == 33 || $j == 50 || $j == 67 || $j == 84 || $j == 101 || $j == 118 || $j == 135 || $j == 152 || $j == 169 || $j == 186 || $j == 203 || $j == 220 || $j == 237 || $j == 254 || $j == 271 || $j == 288 || $j == 305 || $j == 322 || $j == 339 || $j == 356 || $j == 373 || $j == 390 || $j == 407 || $j == 424 || $j == 441 || $j == 458 || $j == 475 || $j == 492 || $j == 509) // every 17 td elements
{
$comma_separated = implode("','", $rowArray); // seperate the array contents with commas and apostrophes, set up for mysql
$comma_separated = "'" . $comma_separated . "'"; // add apostrophes to beginning and end of the string
$result = mysql_query("INSERT INTO standings_20112012 VALUES (".$comma_separated.")"); // insert the data into mysql
$rowArray = array(); // clear the array, for the next record
}
}
评论应该说明很好。这会生成一张表格17 x 30,包含我需要的所有信息。如果我再次运行它,它会插入另外30条记录,这是不好的。我只想更新/覆盖等已经创建的表。所以表中只能有30条记录。然而,我很难过。
任何帮助?
为您的数据集添加一个唯一的主键。然后将你的mysql查询改为INSERT IGNORE
,它会抛出重复项。或者,如果您需要更新表中已有的内容,也可以使用ON DUPLICATE UPDATE
。
'ON DUPLICATE KEY'是基于帖子标题的路线。链接到语法对于OP来说可能是有用的http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –
会删除表格,然后插入信息工作吗? 也,我不知道我将设置为主键的字段。 – jsquadrilla
刚刚测试过,它的工作原理。我不确定它有多高效,但现在没问题。有一个字段“等级”是1-30,是唯一的。如果我将其设置为PK,那么我需要在代码中更改哪些内容? – jsquadrilla
首先'if($ j == 16 || $ j == 33 ...)'是'if(($ j + 1)%17 == 0)'...... – Peter
每次插入,检查记录是否已经存在。如果有,请检查是否需要更新。如果不存在,则插入。 – xbonez
mysql有一个'替换命令' – ajreal