【问题标题】:Is there a way to join SQL SELECT and SQL UPDATE queries into one?有没有办法将 SQL SELECT 和 SQL UPDATE 查询合并为一个?
【发布时间】:2022-11-24 01:21:27
【问题描述】:

有用。但是也许有一种方法可以在没有 mysqli_real_escape_string 的情况下将其变成单个 MySQL 查询?

//GETS VALUES
$sql = "SELECT * FROM `fddq_product_lang` WHERE id_product='19627' AND id_lang='3'";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){

//PREPARES VALUES   
        $id_product= $row['id_product'];
    $name= mysqli_real_escape_string($conn,$row['name']);
    $ndescription=mysqli_real_escape_string($conn,$row['description']);
    $ndescription_short=mysqli_real_escape_string($conn,$row['description_short']);
    $link_rewrite=mysqli_real_escape_string($conn,$row['link_rewrite']);

//UPDATE
$conn->query("UPDATE `fddq_product_lang` SET `description` = '$ndescription', `name` = '$name',`description_short` = '$ndescription_short',`link_rewrite` = '$link_rewrite'  WHERE `fddq_product_lang`.`id_product` = '$id_product'  AND (`fddq_product_lang`.`id_lang` = '1' OR `fddq_product_lang`.`id_lang` = '2' OR `fddq_product_lang`.`id_lang` = '5') ");    

我正在尝试优化代码以加快执行速度并学习新知识。

【问题讨论】:

  • 是的,你可以这么做。您已经可以毫不费力地在网上找到示例。
  • 您可以使用 id_lang IN ('1', '2', '5') 稍微缩短 UPDATE 查询。我很想知道如何组合 UPDATE 和 SELECT 以使用多列数据,因为这是我以前尝试过但从未找到过的方法。

标签: php mysql mysqli


【解决方案1】:

您可以将 SELECT 和 UPDATE 查询与 JOIN 结合起来(就像您在 PHP 端一样)-

UPDATE `fddq_product_lang` `pl1`
JOIN `fddq_product_lang` `pl2`
    ON `pl1`.`id_product` = `pl2`.`id_product`
    AND `pl2`.`id_lang` = 3
SET
    `pl1`.`description` = `pl2`.`description`,
    `pl1`.`name` = `pl2`.`name`,
    `pl1`.`description_short` = `pl2`.`description_short`,
    `pl1`.`link_rewrite` = `pl2`.`link_rewrite`
WHERE `pl1`.`id_product` = 19627
AND `pl1`.`id_lang` IN (1, 2, 5);

这个具有相同 JOIN 的 SELECT 向您显示右侧的值 (pl2.id_lang = 3),它将覆盖左侧的值 (pl1.id_lang IN (1, 2, 5)) -

SELECT `pl1`.*, `pl2`.*
FROM `fddq_product_lang` `pl1`
JOIN `fddq_product_lang` `pl2`
    ON `pl1`.`id_product` = `pl2`.`id_product`
    AND `pl2`.`id_lang` = 3
WHERE `pl1`.`id_product` = 19627
AND `pl1`.`id_lang` IN (1, 2, 5);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多