0

これは私のデータベース テーブルです。データベース テーブルから一番下のテーブルを選択するにはどうすればよいですか?

一意の名前と型から 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
ブライアン キャッシュ 200
フランク チェック 600
ジョン キャッシュ 150
ジョン キャッシュ 300
フランク クレジット カード 200

----テーブルが必要----

名前 ID 名前 タイプ ID タイプ 支出
1 ジョン 1 クレジット カード 550
2 ブライアン 2 現金 200
3 フランク 3 小切手 600
1 ジョン 2 現金 150
1 ジョン 2 現金 300
3 フランク 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 に答える