Php Mysql;案例什么时候?然后呢?。如何为其创建数据?用foreach

Php Mysql;案例什么时候?然后呢?。如何为其创建数据?用foreach,php,mysql,case,Php,Mysql,Case,具有具有以下值的输入行(例如,仅显示2行,但可能有更多行;当然,值可能不同) 必须使用这些值更新mysql表 查询可能是这样的 UPDATE 2_1_transactionpartners SET CompanyName = CASE NumberRenamed WHEN ? THEN ? WHEN ? THEN ? END, RegistrationNumber = CASE NumberRenamed WHEN ? THEN ? WHEN ? THEN ? END

具有具有以下值的输入行(例如,仅显示2行,但可能有更多行;当然,值可能不同)

必须使用这些值更新mysql表

查询可能是这样的

 UPDATE 2_1_transactionpartners SET 
 CompanyName = CASE NumberRenamed 
 WHEN ? THEN ? WHEN ? THEN ? 
 END, 
 RegistrationNumber = CASE NumberRenamed 
 WHEN ? THEN ? WHEN ? THEN ? 
 END 
 WHERE NumberRenamed in (?,?)

现在在foreach中创建变量

$entry_id_for_number_renamed = array();

foreach ($_POST['entry_id'] as $i => $entry_id) {

    $for_company_name .= ( $_POST['entry_id'][$i]. ','. $_POST['transaction_partner_name'][$i]. ',' );

    $for_registration_number .= ( $_POST['entry_id'][$i]. ','. $_POST['registration_number'][$i]. ',' );

    $entry_id_for_number_renamed[] = $_POST['entry_id'][$i];

    $when_then .= 'WHEN ? THEN ? ';
    $placeholders_for_number_renamed .= '?,';

}

$for_company_name = rtrim($for_company_name, ',');
$for_company_name = explode(',', $for_company_name);

$for_registration_number = rtrim($for_registration_number, ',');
$for_registration_number = explode(',', $for_registration_number);

$insertData = array_merge( $for_company_name, $for_registration_number, $entry_id_for_number_renamed );

如果您有更好(更短)的解决方案的想法,请提供建议

请首先告诉我们您将使用代码实现什么。那么目标是什么,期望的输出是什么等等;)请首先告诉我们您将通过代码实现什么。那么目标是什么,期望的输出是什么等等;)对不起,可能是误会。要使用输入值更新(用户在html输入中输入值)。问题/问题是我的代码相当长(例如,如果需要更新许多输入列),问题中只有两列(
CompanyName
RegistrationNumber
)。实际上有9列。所以需要对所有9列重复代码。如果后者添加了一些列,则必须更新代码(可能忘记更新)。可能存在一些更短更简单的解决方案。不管您有多少列/行。所有列定义为虚拟字段(
作为列名称)和行(由并集分隔的块)。备选方案:您可以创建临时表/视图并从中更新,但这是一个3个操作(创建临时表、填充临时表、从临时表更新)。什么地方都没有。对不起,可能是误会。要使用输入值更新(用户在html输入中输入值)。问题/问题是我的代码相当长(例如,如果需要更新许多输入列),问题中只有两列(
CompanyName
RegistrationNumber
)。实际上有9列。所以需要对所有9列重复代码。如果后者添加了一些列,则必须更新代码(可能忘记更新)。可能存在一些更短更简单的解决方案。不管您有多少列/行。所有列定义为虚拟字段(
作为列名称)和行(由并集分隔的块)。备选方案:您可以创建临时表/视图并从中更新,但这是一个3个操作(创建临时表、填充临时表、从临时表更新)。根本没有。
UPDATE transactionpartners
SET transaction_partner_name = q.transaction_partner_name,
    registration_number      = q.registration_number
FROM (
    SELECT 10          AS entry_id                ,
        'new name 1'   AS transaction_partner_name,
        'new number 2' AS registration_number

    UNION

    SELECT 11          AS entry_id                ,
        'new name 3'   AS transaction_partner_name,
        'new number 4' AS registration_number
    )
    q
WHERE q.entry_id = transactionpartners.entry_id
$entry_id_for_number_renamed = array();

foreach ($_POST['entry_id'] as $i => $entry_id) {

    $for_company_name .= ( $_POST['entry_id'][$i]. ','. $_POST['transaction_partner_name'][$i]. ',' );

    $for_registration_number .= ( $_POST['entry_id'][$i]. ','. $_POST['registration_number'][$i]. ',' );

    $entry_id_for_number_renamed[] = $_POST['entry_id'][$i];

    $when_then .= 'WHEN ? THEN ? ';
    $placeholders_for_number_renamed .= '?,';

}

$for_company_name = rtrim($for_company_name, ',');
$for_company_name = explode(',', $for_company_name);

$for_registration_number = rtrim($for_registration_number, ',');
$for_registration_number = explode(',', $for_registration_number);

$insertData = array_merge( $for_company_name, $for_registration_number, $entry_id_for_number_renamed );
UPDATE transactionpartners
SET transaction_partner_name = q.transaction_partner_name,
    registration_number      = q.registration_number
FROM (
    SELECT 10          AS entry_id                ,
        'new name 1'   AS transaction_partner_name,
        'new number 2' AS registration_number

    UNION

    SELECT 11          AS entry_id                ,
        'new name 3'   AS transaction_partner_name,
        'new number 4' AS registration_number
    )
    q
WHERE q.entry_id = transactionpartners.entry_id