SQL Example :Group Selector 1
2020/08/07

グループセレクタの設定例 1


発売年の年代

v0.91000まで「年代」といいつつ1年毎でリストアップしてありました。
ちなみに付属の設定ファイルは「年」という表現に修正してあります。

それでは今度こそ「年代」でグルーピングできるクエリを定義してみましょう。
クエリは「年」とほとんど同じです。

以下が設定例となります。

-- tabs
年代
-- tabs

-- queries
SELECT DISTINCT CASE
  WHEN ifnull(sale_year, '') THEN substr(sale_year,1,3)||'0 年代' ELSE '' END
  FROM list_view ORDER BY sale_year;
-- queries

-- operators
SELECT * FROM list_view WHERE (
  CASE '@click-string' WHEN '' THEN NOT ifnull(sale_year, '')
  ELSE sale_year LIKE substr('@click-string',1,3) || '%' END);
-- operators

設定ファイル /resource/group_selector.cnf を開き、既存の「発売年」を書き換えるなり、「年代」として追記するなりして編集してください。
但し、タブ名とクエリ定義の順番が同じになるよう注意してください。

group_selector.cnf を変更したら CatShanty2 を起動(もしくは再起動)し、 オプション→全体設定→表示関係にて グループセレクタの「表示するタブ」を設定してください。 そして少し面倒ですが、もう一度 CatShanty2 を再起動させるとグループセレクタのタブが更新されます。

グループセレクタ抽出クエリ部の説明

SELECT DISTINCT CASE
  WHEN ifnull(sale_year, '') THEN substr(sale_year,1,3)||'0 年代' ELSE '' END
  FROM list_view ORDER BY sale_year;

sale_year は諸般の事情で未設定が '0''' になっています。
なので ifnull(sale_year, '') を使って設定済みを判定しています。

設定済みなら substr(sale_year,1,3)||'0 年代' 、 未設定なら '' で抽出されます。
これにより例えば 1982-12-23 などに設定された日付は全て 1980 年代 に整形され、更に DISTINCT で纏められることになります。


アイテムリスト絞り込みクエリ部の説明

SELECT * FROM list_view WHERE (
  CASE '@click-string' WHEN '' THEN NOT ifnull(sale_year, '')
  ELSE sale_year LIKE substr('@click-string',1,3) || '%' END);

WHERE の中の CASE の中に条件式を書きました。

指定なし '' がクリックされると NOT ifnull(sale_year, '') により '0' '' 両方が抽出されます。 (グループセレクタ抽出と異なり NOT が付いて意味が反転しています。)

1980 年代 がクリックされたなら substr('@click-string',1,3) || '%' により 198% へ整形されます。
結果として sale_year LIKE '198%' で比較演算され、198 に前方一致する発売日データを持つアイテムがリストアップされます。

marm.nakamura