Skip to content

Instantly share code, notes, and snippets.

@youdays
Last active June 4, 2025 03:08
Show Gist options
  • Save youdays/64973927bdd6afbbbf87d224cf59f591 to your computer and use it in GitHub Desktop.
Save youdays/64973927bdd6afbbbf87d224cf59f591 to your computer and use it in GitHub Desktop.
アリーナのカード情報取得SQL(2025/06/04 ver)

概要

MTGアリーナのカード情報をアプリケーションのDBから取得するSQL

下記のパスにDBファイルがある(拡張子は.mtga だけど、中身は sqlite)

  • Mac
    • ~/Library/Application Support/com.wizards.mtga/Downloads/Raw/Raw_CardDatabase_***.mtga

SQLのサンプルはとりあえずFIN のパックにしている

このSQLを実行すると「タイトル」「カード効果」を表示することができる

実行結果(サンプル)

image

補足

2025/06/04 のアップデートで言語のテーブル構成が変更になった

各言語ごとにテーブルが分かれるようになったので、それようにSQLを更新した

-- SQLite
WITH RECURSIVE
-- 対象とするカードデータを抽出
-- セット(ExpansionCode,DigitalReleaseSet)などはここで指定する
TargetCardData AS (
SELECT
*
FROM
Cards
WHERE
isToken = 0 -- トークンでないカードを対象
AND IsPrimaryCard = 1 -- プライマリカードを対象(創出カードなどは除外)
-- ↓の条件は必要に応じて変更
AND ExpansionCode = 'FIN' -- FINセットに対象
-- AND DigitalReleaseSet = 'Y25-TDM' -- アルケミー限定用の指定(例: タルキールアルケミー)
),
-- カンマ区切りにAbilityIdsを分割する(再帰処理が必要)
AbilitySplit AS (
-- 初期データ: カンマで最初のペアを抽出
SELECT
GrpId,
substr (AbilityIds, 1, instr (AbilityIds || ',', ',') - 1) AS Pair,
substr (AbilityIds, instr (AbilityIds || ',', ',') + 1) AS Remaining
FROM
TargetCardData
UNION ALL
-- 再帰処理: 残りのデータを処理
SELECT
GrpId,
substr (Remaining, 1, instr (Remaining || ',', ',') - 1) AS Pair,
substr (Remaining, instr (Remaining || ',', ',') + 1) AS Remaining
FROM
AbilitySplit
WHERE
Remaining != ''
),
-- AbilitySplitをコロンで分割して AbilityId と AbilityLocalizationId を抽出
AbilityPairs AS (
SELECT
GrpId,
substr (Pair, 1, instr (Pair, ':') - 1) AS AbilityId,
substr (Pair, instr (Pair, ':') + 1) AS AbilityLocalizationId
FROM
AbilitySplit
),
-- 必要なローカライズテーブルのカラムのみ抽出
TargetLocalizations_JP AS (
-- 必要な日本語のみ抽出
-- 基本はフォーマット1が見やすいので1を使用
-- ただし、カードタイトルに漢字が入る場合は送り仮名がない表記の3が用意されている
-- その場合はみやすさ優先で3を使用するようなテーブルを用意する
SELECT
LocId,
Loc
FROM
(
-- フォーマットが1または3のものを抽出し、大きな数字のほうを優先する
SELECT
LocId,
Loc,
Formatted,
ROW_NUMBER() OVER (
PARTITION BY
LocId
ORDER BY
Formatted DESC
) AS rn
FROM
Localizations_jaJP
WHERE
Formatted in (1, 3) -- 1は通常のフォーマット、3は漢字がある場合に送り仮名を省略したフォーマット(主にタイトル用)
)
WHERE
rn = 1
)
SELECT
TargetCardData.GrpId,
-- locTitle.enUS AS TitleName_enUS, -- タイトル名(英語)
locTitle.Loc AS TitleName_jaJP, -- タイトル名(日本語)
-- GROUP_CONCAT (locAbility.enUS, char(10)) AS AbilityNames_enUS, -- 能力(英語)を改行で結合
GROUP_CONCAT (locAbility.Loc, char(10)) AS AbilityNames_jaJP -- 能力(日本語)を改行で結合
FROM --
TargetCardData
LEFT JOIN AbilityPairs ap ON TargetCardData.GrpId = ap.GrpId
LEFT JOIN TargetLocalizations_JP locAbility ON ap.AbilityLocalizationId = locAbility.LocId
LEFT JOIN TargetLocalizations_JP locTitle ON TargetCardData.TitleId = locTitle.LocId
GROUP BY
TargetCardData.GrpId,
locTitle.Loc;
-- ここで好みの条件のWHEREを追加して絞り込む(セミコロンの移動が忘れがち)
-- WHERE
-- locTitle.Loc LIKE '%なる絆%'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment