2016-12-16 75 views
-1

我试图替换选择查询的结果中的列,如 This reference中所示,但与示例不同,我在表中有很多列,因此我无法指定select查询中每列的名称。替换选择查询中的特定列数据?

我尝试了一些方法来达到同样的效果,但没有一个看起来有效。

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作为实现语言。

回答

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", ....); 

,并在看它阵列。这将保持您的查询短而甜。这种方法的优点是每次添加新角色时都不需要更改查询。如果你得到大量的角色(比如几十个),你可能实际上需要一个单独的表格。

+0

感谢您的帮助,我试过case/when too但因为我需要从各种表中动态地获取替换数据,因此这并没有太大的帮助,实施PHP数组的问题是,由于使用结果在很多平台上,我需要优化sql查询itlself, – OshoParth

+1

我已经根据您提供的信息回答了问题。 – e4c5

+1

最优化的解决方案是做php数组,因为它根本不会对数据库造成任何压力。但是,如果表是索引索引的,则包含角色的表上的联接将同样有效。 – e4c5