【问题标题】:MySQL Script to SET new Column Values Based on Another Columns valueMySQL 脚本根据另一个列值设置新列值
【发布时间】:2013-06-23 04:45:56
【问题描述】:

我有一个现有的数据库和一个现有的表,在该表中我有一个名为“packageno”的列,它代表包裹编号。我有超过 400 行的数据库内容。每个唯一行都有一个包裹编号。但是现在,我添加了一个名为“packagedescription”的列,它代表包描述。现在新列是空的。但是我有一个PHP代码中包描述的图例,例如:

if ($packageno == 1) {
 $description = 'Interior Rooms';
 }
if (packageno == 2) { 
 $description = 'Exterior Rooms';
 }

等等……

但从一开始,我就没有添加描述。相反,我添加了包裹号。

所以,我想做的是更新或设置 packagedescription 列中的那些空数据库字段,以及包的实际描述。如何使用 packageno 编写 MySQL 脚本来输入所有现有行的描述?

我对 MySQL 有一点了解,但我从来没有对现有的行做过这样的事情。

任何帮助将不胜感激!

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    您也可以在一个查询中完成:

    UPDATE `table_name` SET packagedescription = 
        IF(packageno = 1, 'Interior Rooms',
        IF(packageno = 2, 'Exterior Rooms',
        IF(packageno = 3, 'Some Rooms',
        IF(packageno = 4, 'Other Rooms',
        IF(packageno = 5, 'Outdoor Rooms',
        IF(packageno = 6, 'Indoor Rooms',
        IF(packageno = 7, 'Commercial Rooms',
        IF(packageno = 8, 'Residential Rooms',
        IF(packageno = 9, 'Industrial Rooms',
        IF(packageno = 10, 'Kitchen Rooms',
        IF(packageno = 11, 'Office Rooms',
        IF(packageno = 12, 'Bedrooms', NULL))))))))))))
    

    您还可以创建一个 PackageNumberDescription 表并从该表中进行更新,如下所示:

    PackageNo  PackageDescription
    ---------  ------------------
    1          Interior Rooms
    2          Exterior Rooms
    
    UPDATE packages p JOIN PackageNumberDescription d on p.packageno = d.packageno SET p.packagedescription = d.packagedescription
    

    【讨论】:

    • 谢谢..我正在寻找确切的东西:)...这对我帮助很大
    【解决方案2】:

    如果你有少量的 id,你可以这样做:

    UPDATE package SET description = 'Interior Rooms' WHERE packageNo = 1;
    UPDATE package SET description = 'Exterior Rooms' WHERE packageNo = 2;
    

    如果您有数百或数千个,可能会有点烦人。

    或者,您可以有一个单独的表格,而不是重复说明,其中包含说明并链接到它。

    PackageID    Description
    ---------    --------------
    1            Interior Rooms
    2            Exterior Rooms
    

    然后您可以更改您的选择以包含另一个表:

    SELECT * FROM package p INNER JOIN packageRooms pr ON p.packageID = pr.packageID
    

    【讨论】:

      【解决方案3】:

      update 查询将是

      UPDATE table_name SET packagedescription = 'Interior Rooms' 
      WHERE packageno = 1
      
      UPDATE table_name SET packagedescription = 'Exterior Rooms' 
      WHERE packageno = 2
      

      其他人也一样....

      【讨论】:

      • 酷!很简单!所以我有 16 个包,所以我会在 16 次不同的时间运行具有不同描述和包号的脚本。谢谢!很简单!有时我们想得太难了!
      • @PhilMulkins 是的,您必须对具有不同描述和包号的所有 16 个包运行此查询。 :)
      猜你喜欢
      • 1970-01-01
      • 2018-03-15
      • 2019-11-02
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多