2016-09-18 28 views
0

マジックでは、そのコストにマナシンボルを持つカードが集まります。 {U} {U}を持つすべてのカードをマナ・コストで取っておきたいです。それは、その前に任意の数を意味するか、または{U}以外のキャラクタは品質になりますが、{U} { U}をカードコストで使用します。MYSQLシンボルの一致数を照会


CARD_NAME  | CARD_COST | 
----------------------------------- 
Avatar of Will | {6}{U}{U} 
------------------------- 
Aven Smokeweaver| {2}{U}{U} 
----------------------------- 
Ayesha Tanaka | {W}{W}{U}{U} 
------------------------------------- 
Azami   | {2}{U}{U}{U} 

私の結果は次のようになります。

Avatar of Will {6}{U}{U} -ok 
Aven Smokeweaver {2}{U}{U} -ok 
Ayesha Tanaka {W}{W}{U}{U} - ok 
Azami {2}{U}{U}{U} - exclude not ok 

は、これらの結果をフェッチする巧妙な方法はありますか?

Select CARD_NAME from Cards `WHERE (`CARD_COST` LIKE "%{U}{U}%")` 
+0

1つのコストあたり1つの行があるようなデータベース構造ですか? – SOFe

+0

これは現在、各カードがどのように行になっているかです。 – Edward

+0

私は、あなたが望むことをするクエリを得ることができたとしても、それは非効率的であることを意味します。なぜコストのための別のテーブルを作成しないのですか? – SOFe

答えて

1

代わりに別のテーブルを作成します。あなたのCARD_NAMEはCardsの主キーであると仮定すると:

CREATE TABLE Cards_Costs (
    CARD_NAME VARCHAR(255), 
    COST_NAME CHAR(1), 
    COST_COUNT INT 
); 
CREATE UNIQUE INDEX namecost ON Cards_Costs (CARD_NAME, COST_NAME); 

それでは、あなたが直接値を照会することができます。

それは、カウントを維持するためには不便である場合、あなたはまた、コスト・カウントごとに行を作成することができます

CREATE TABLE Cards_Costs (
    CARD_NAME VARCHAR(255), 
    COST_NAME CHAR(1) 
); 
CREATE INDEX namecost ON Cards_Costs (CARD_NAME, COST_NAME); 

その後、あなたは次のように照会することができます:あなたを変更する方が良いだろう

SELECT COUNT(*) FROM Cards_Costs WHERE CARD_NAME=:s AND COST_NAME=:s 
関連する問題