0

这是我的数据库表。我如何能够从数据库表中选择底部表?

是否可以从唯一的名称和类型创建 NameID 和 TypeID?

编辑---我已经有了使用案例的类型,因为只有 3 种类型。

SELECT 
  name, type, spending, 
    CASE type 
       WHEN 'Credit Card' THEN 1 
       WHEN 'Cash' THEN 2 
       WHEN 'Cheque' THEN 3 
    END AS typeID_  
FROM spendtable

是否可以在名称列上做同样的事情?

谢谢!

----数据库表----

姓名 类型 消费
John Credit Card 550
Brian Cash 200
Frank Check 600
John Cash 150
John Cash 300
Frank Credit Card 200

----需要桌子----

NameID 名称 TypeID 类型 支出
1 John 1 信用卡 550
2 Brian 2 Cash 200
3 Frank 3 Check 600
1 John 2 Cash 150
1 John 2 Cash 300
3 Frank 1 信用卡 200

- - - -编辑

我最终使用 2 个查询和 php 来获取所需的表

 function getInfo(){   
     SELECT 
       name, type, spending, 
         CASE type 
            WHEN 'Credit Card' THEN 1 
            WHEN 'Cash' THEN 2 
            WHEN 'Cheque' THEN 3 
         END AS typeID_  
     FROM spendtable 
 }

 function getName(){   
       SELECT name    
       FROM spendtable   
       GROUP BY share_ ASC           
 }


$info_array = $this->getInfo(); 
$name_array = $this->getName(); 

 for($i=0; $i<count($info_array); $i++){   
   $info_array[$i]['nameID'] = '';   
     for($j=0; $j<count($name_array); $j++){
     if($info_array[$i]['nameID'] == $name_array[$j]){
       $info_array[$i]['nameID'] = $j;
     }   
   }         
}
4

1 回答 1

0

我能够扩展您现有的查询以支持该NameID列:

SELECT 
  name, type, spending, 
    CASE type 
       WHEN 'Credit Card' THEN 1 
       WHEN 'Cash' THEN 2 
       WHEN 'Cheque' THEN 3 
    END AS TypeID, 
    CASE name 
       WHEN 'John' THEN 1 
       WHEN 'Brian' THEN 2 
       WHEN 'Frank' THEN 3 
    END AS NameID
FROM spendtable

作为设计限制,存储在数据库中的人只允许命名为 John、Brian 或 Frank :)

认真起来,假设可能存在未知数量的名称,我不确定您是否可以(或想要)在查询中进行这种处理。相反,请考虑维护一个单独的Name表来跟踪唯一名称:

NameID   Name
1        John
2        Brian
3        Frank

然后您的查询可以加入此表:

SELECT 
  s.name, s.type, s.spending, 
    CASE s.type 
       WHEN 'Credit Card' THEN 1 
       WHEN 'Cash' THEN 2 
       WHEN 'Cheque' THEN 3 
    END AS TypeID, 
    n.nameid
FROM spendtable s
JOIN Name n on n.name = s.name

当然,这意味着您需要使Name表格保持最新,确保为新名称插入行。

于 2012-04-08T06:25:22.260 回答