SQL、販売されているBPO一覧の取得

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

Leave a Reply