CCPは、ゲームの内部データを公開しています。この内部データは、SQL言語を使うことで活用することができます。
以下、そんなSQLで悩んで解決したメモです。
未整理のBPOが沢山あって、何を持っているか分らなくなってきたため、BPO管理ツールを作っています。そこで、疑問だったのが販売されているBPO一覧の取得方法でした。
問題
SELECT t.typeID, t.typeName FROM invTypes t INNER JOIN invBlueprintTypes b ON (b.blueprintTypeID = t.typeID) WHERE t.published = 1
このSQLにより、全てのBPOを取得することができます。これには販売されていない Tech 2 BPO も含まれており不便でした。
そこで
AND b.techLevel = 1
の条件を足すと、一部の販売されている Tech 2 BPO(内部データ的にはT2扱い)が取得出来ませんでした。具体的には R.A.M.- Starship Tech Blueprint (typeID = 11890) などです。
解決
BPOはNPCコープが販売していることから、NPCコープの販売品一覧と組み合わせることで解決できました。
いやー気がつくのに時間かかりましたw
SELECT t.typeID, t.typeName FROM invTypes t INNER JOIN invBlueprintTypes b ON (b.blueprintTypeID = t.typeID) LEFT OUTER JOIN ( SELECT * FROM crpnpccorporationtrades GROUP BY typeID ) c ON (c.typeID = t.typeID) WHERE t.published = 1 AND c.corporationID IS NOT NULL