私は現在、私がいる状況の解決策を見つけるのに苦労しています。データベース構造の背景を説明します: テーブル 'エンティティ' には列Ent_ID (AI, Int), Ent_Type (Enum, 'Locations, Characters, Houses, Armies') およびObj_ID (Int)。Obj_ID は、関連するテーブルの ID と一致します。たとえば、「Locations」テーブルには、列 Obj_ID (AI、Int)、Loc_Name (テキスト)、およびLoc_Desc (テキスト) があります。
キャラクターは日付によって異なる場所にいる可能性があるため、これらの種類のものを格納するための「TimeSensitives」テーブルがあります。このテーブルには、列TS_ID (AI、Int)、Ent_ID (Int)、TS_Start (Float)、TS_End (Float)、およびTS_Content (Text) があります。Ent_IDは、何らかの情報 (場所など) である文字です。ロケーションの Ent_ID は TS_Content に入ります。
ご想像のとおり、さまざまな日付にさまざまなキャラクターが登場する場所がたくさんあります。私の問題は、検索フィルターのような名前を持つ場所、または検索フィルターのような名前を持つ文字がある場所を検索したいということです。
これまで、「場所」タイプの各エンティティをループしてから、現在そこにあるすべての文字をループしました。これは私のコードです:
SELECT *
FROM Entities
INNER JOIN Locations
ON Entities.Obj_ID=Locations.Obj_ID
WHERE Entities.Ent_Type='Locations'
AND Loc_Name LIKE ?
次に、それぞれについて:
SELECT *
FROM TimeSensatives
INNER JOIN Entities
ON TimeSensatives.Ent_ID=Entities.Ent_ID
INNER JOIN Characters
ON Entities.Obj_ID=Characters.Obj_ID
WHERE TS_Type='Location'
AND TS_Content=?
AND TS_Start<=?
AND TS_End>=?
ご覧のとおり、現在のところ、場所を選択するときに検索フィルターのみが考慮されます。文字にも検索フィルターを実装したいと思いますが、必ずしも名前が一致するわけではなく、名前が一致する文字がある場所を表示する必要があります。それが理にかなっていることを願っています。私の現在のコードは、一致する名前のない場所を選択しないため、一致するキャラクター名を検索する機会がありません。
これを 1 つの SQL ステートメントに結合する方法はありますか? または、誰かが私がやろうとしていることを達成する方法を考えることができますか?
何か助けがあれば大歓迎です。さらに情報が必要な場合は、お問い合わせください:) Kallum