【问题标题】:Replace specific column data in select query?替换选择查询中的特定列数据?
【发布时间】:2017-05-01 20:49:50
【问题描述】:

我正在尝试替换选择查询结果中的列,如 This reference 但与示例不同,我在表中有很多列,因此我无法在选择查询中指定每一列的名称。

我尝试了一些方法来达到同样的效果,但似乎都没有效果。

select 
    *, (REPLACE(REPLACE(role_id,1,"admin"),2,"moderator") AS role_id  
from user;

Select * 
from user 
where role_id = (select REPLACE(role_id,1,"admin") as role_id from user;

这里我们假设 role_id 只有两个可能的值,但是在某些情况下,它可能必须从另一个表中获取数据,即一个不同的表,其中包含不同的 id 和对应于它们的值。

那么有没有办法在单个查询中达到以下条件:-

  • 替换从选择查询返回的某些字段的值(假设许多列单独写入所有列的名称是不可行的)
  • 从不同表中获取单个表中不同列的替换值。

我需要在一个查询中实现上述条件,但更改不应该在数据库中,只有选择查询的结果需要优化。

也已经参考了以下,但无济于事。

我使用 phpmyadmin 作为引擎,使用 php 作为实现语言。

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    如果我正确理解了您的问题,使用 CASE/WHEN 会更容易

    SELECT *,
     CASE WHEN role_id = 1 THEN "admin" WHEN role_id = 2 THEN "moderator" END AS role_id 
    FROM user;
    

    但在 PHP 中使用数组可能更容易,

    $roles = array("1" => "admin", "2" => "moderator", .... );
    

    并在数组中查找它。这将使您的查询简短而甜蜜。这种方法的优点是您无需在每次添加新角色时都更改查询。如果您有大量角色(比如几十个),您可能实际上需要一个单独的表格。

    【讨论】:

    • 感谢您的帮助,我也尝试了 case/when,但是由于我需要从各种表中动态地获取替换数据,因此这没有多大帮助,实现 php 数组的问题也是由于在许多平台上使用结果,我需要优化 sql 查询本身,
    • 我已根据您提供的信息回答了问题。
    • 最优化的解决方案是使用 php 数组,因为这根本不会对数据库造成任何压力。但是,如果表被正确索引,则包含角色的表上的连接同样有效。
    • 无法在选择性字段中实现连接并替换获取的值。问题依然存在!由于连接返回正确的值,但仍然无法替换选择查询返回的字段中的结果。
    • 你在说什么?您的问题中没有任何连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多