这是我的数据库表。我怎样才能从数据库表中选择底部表?
是否可以从唯一的名称和类型创建NameID和TypeID?
EDIT --- 我有使用案例的类型,因为只有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
是否可以在名称列上执行相同的操作?
谢谢!
----数据库表----
名称类型 消费
约翰信用卡550
Brian Cash 200
弗兰克检查 600
约翰卡什 150
约翰 现金300
弗兰克信贷 卡200
----表需要----
NameID名称TypeID类型 支出
1 约翰1张信用卡 550
2 布莱恩2 现金200
3弗兰克3检查 600
1约翰2现金 150个
1约翰2现金 300个
3 Frank 1信用卡200
------- EDIT
我最终使用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;
}
}
}
答案 0 :(得分: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
表的最新状态,确保为新名称插入行。