【问题标题】:Cron php update/insert one sql table from anotherCron php 更新/插入另一个 sql 表
【发布时间】:2012-12-06 18:47:44
【问题描述】:

我不是很擅长 php,所以我很感激你的帮助。

我需要从一个 mysql 表更新或插入某些数据到同一服务器的另一个 mysql 表!

购买的表具有相同的列,我想要的是使用预先选择的中间值更新某些行! 表:

|ID| |mid| |value1| |value2|

我做了 php for update 或 insert 的部分来检查它是否存在,但我需要它做的是重复每个给定的步骤 pos

所以我需要它为我列出的每个中间重复这个脚本来完成

mid1 = 66
mid2 = 78
mid3 = 24


$con = mysql_connect("localhost","User","Pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db(baza, $con);

$result = mysql_query("SELECT * FROM table WHERE mid='???' ");

while($row = mysql_fetch_array($result))
{
$mid=$row['mid'];
$name=$row['value1'];
$alias=$row['value2'];
}

mysql_close($con);
?> 
<?php
$con2 = mysql_connect("localhost","user2","pass2");
if (!$con2)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db(baza2, $con2);


$query = "SELECT * FROM table WHERE mid='$mid' ";
$resulta = mysql_query($query) or die(mysql_error());

if (mysql_num_rows($resulta) )
{

mysql_query("UPDATE table SET mid='$mid', name='$name', alias='$alias'");
mysql_close($con2);
echo "1 record added1";
}
else
{
$sql="INSERT INTO table (mid, name, alias)
VALUES
('$mid','$name','$alias')";

if (!mysql_query($sql,$con2))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con2);
}

提前谢谢你!

【问题讨论】:

  • 我认为 mysql where in function 是你需要的......SELECT * FROM table WHERE mid in('66,78,24') .
  • 停止使用mysql_函数哥们。改为使用 mysqli_ (如果您喜欢这种程序方式)。 mysql_ 已弃用,因此请在学习的同时尝试以更好的方式学习自己。 php.net/manual/en/book.mysqli.php
  • 另外看看mysql的insert... select功能:dev.mysql.com/doc/refman/5.0/en/insert-select.html。如果您需要从一个表中选择某些内容只是为了将其插入到另一个表中。一开始你最好省略 php..
  • - bipen thx - Damien Overeem 感谢您的建议,我会调查一下,但现在我没有那么多时间了! - bipen thx

标签: php mysql sql foreach cron


【解决方案1】:

如果这两个数据库位于同一台服务器上,您可以设置您的帐户以访问这两个数据库。如果是这样,您可以通过这种方式在查询中简单地选择数据库:

mysql_query("SELECT * FROM my_database.my_table WHERE ..");

您的代码将是..

$mid_array = array(66, 78, 24);
$con = mysql_connect("localhost","user","pass");
if(!$con) {
    die('could not connect: '.mysql_error());
}
mysql_select_db(baza, $con);

foreach($mid_array AS $mid) {
    $result = mysql_query("SELECT * FROM table WHERE mid = '".$mid."'";
    while($row = mysql_fetch_array($result)) {
       mysql_query("INSERT INTO baza2.table (mid, name, alias) VALUES ('".$row['mid']."', '".$row['name']."', '".$row['alias']."') ON DUPLICATE KEY UPDATE name = '".$row['name']."', alias = '".$row['alias']."'");
    }
}
mysql_close($con);

您不需要其他查询来检查带有 mid = .. 的记录是否已经存在。您可以使用 mysql ON DUPLICATE KEY UPDATE 语句简单地处理此问题,该语句仅在 1 个查询中为您执行此操作!

【讨论】:

  • 创新媒体只是为了在实施您的解决方案之前保持安全。 Baza1 是包含所有数据的数据库,所有 mid-s 都列在那里我只需要从那个中获取一些 mid-s 以在 baza2 中更新/插入另外购买的数据库中的每个表都有自动增量 ID,但是因为 db1 有更多的 mid- s 比 db2 他们不对应可能是一个问题!附言忘了告诉你谢谢!
  • 我没有看到直接的问题。当您在 db2 中自己设置“mid”时,如果“mid”已经存在,它只会更新名称和别名。
  • 它工作只需要添加 -- ) -- "SELECT * FROM table WHERE mid = '".$mid."'");
  • 创新媒体你还在吗?
  • 好吧,我有一个问题,其中一个字段被命名为 show 所以如果我在插入和更新后删除它和每个大腿,它可以工作,但如果我把它放回去,它就不会 mysql_query("INSERT INTO baza2.table (mid, name, alias, show , value1) VALUES ('".$row['mid']."', '".$row['name']."', '".$row ['alias']."', '".$row['show']."', '".$row['value1']."') ON DUPLICATE KEY UPDATE name = '".$row[' name']."', alias = '".$row['alias']." , show = '".$row['show']."' , value1 = '".$row['value1'] ."' ");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 2013-08-15
  • 2020-11-25
相关资源
最近更新 更多