Другой подход - добавить столбец месяцев и использовать побитовый флаг для хранения доступных месяцев.
January = 1,
February = 2,
March = 4,
April = 8,
May = 16,
June = 32,
July = 64,
August = 128,
September = 256,
October = 512,
November = 1024,
December = 2048
Таблица
CREATE TABLE fish (
id INTEGER PRIMARY KEY,
name TEXT,
months INTEGER
);
Для магазина Blue Marlin 103 в столбец месяцев (январь, февраль, март, июнь и июль) 1 + 2 + 4 + 32 + 64 = 103.
id | name | months
1 | Blue Marlin | 103
затем используйте следующий запрос для вывода результатов
select id, name,
CASE WHEN (months & 1 ) <> 0 THEN 1 ELSE 0 END as January,
CASE WHEN (months & 2 ) <> 0 THEN 1 ELSE 0 END as February,
CASE WHEN (months & 4 ) <> 0 THEN 1 ELSE 0 END as March,
CASE WHEN (months & 8 ) <> 0 THEN 1 ELSE 0 END as April,
CASE WHEN (months & 16 ) <> 0 THEN 1 ELSE 0 END as May,
CASE WHEN (months & 32 ) <> 0 THEN 1 ELSE 0 END as June,
CASE WHEN (months & 64 ) <> 0 THEN 1 ELSE 0 END as July,
CASE WHEN (months & 128 ) <> 0 THEN 1 ELSE 0 END as August,
CASE WHEN (months & 256 ) <> 0 THEN 1 ELSE 0 END as September,
CASE WHEN (months & 512 ) <> 0 THEN 1 ELSE 0 END as October,
CASE WHEN (months & 1024 ) <> 0 THEN 1 ELSE 0 END as November,
CASE WHEN (months & 2048 ) <> 0 THEN 1 ELSE 0 END as December
from fish
Вот так
id | name | January | February | March | April | May | June | July | August | September | October | November | December
1 | Blue Marlin | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0
Это дает хороший обзор каждого fi sh и месяцев, в которых он доступен, с дополнительным преимуществом, вы можете быстро сканировать конкретный месяц и видеть, какие fi sh доступны .
Вы можете расширить это, изменив операторы case, чтобы они возвращали что-то другое, кроме 1 и 0, если вы предпочитаете или измените запрос для отображения диапазонов месяцев.
Лично, если бы я использовал это для игры, я бы хотел видеть макет месяц за месяцем.