私のMysqlデータベースには、オブジェクトタイプによって定義されたオブジェクトがあり、オブジェクトタイプを結合してそのプロパティを設定します。そして、それはスペンサーによって指摘されたエンティティ属性値モデルに基づいています。
データベースは以下よりも少し複雑ですが、これで私の質問がもう少し明確になるはずです。
objects
オブジェクトに関するいくつかの基本情報を含むmysqlテーブルがあります。たとえばcreate_date
、、、title
そしてauthor
もちろんid
。
object_properties
オブジェクトに関するデータをさらに含むテーブルもあります。
それらを検索するのに問題があります。たとえば、オブジェクトには、end_date
とstart_date
を個別のプロパティとして持つ場合があります。これらはそれぞれ、に独自の行を持ちobject_properties
ます。
それぞれに独自の行があるため、終了日と開始日をどのように一致させるのでしょうか。
通常、私はこのようにクエリします。select * from table where start_date > value AND end_date < value
しかし、各プロパティは別々の行であるため、これを行うことはできません。
次のクエリを試しました。`
select *
from object_properties
where object_id = 1
and ( (object_properties.type_id = 1)
and (object_properties.value = 2)
and ( (object_properties.type_id = 2)
and (object_properties.value = 2)
)
)
上記の例ではtype_id = 1
、が開始日とtype_id =2
終了日になりますが、これは機能していないようです。私はそれを間違った見方をしていると思っていました。
質問のタイトルが間違っている可能性があることに気付きました。この方法でデータを保存する方法がよくわかりません。
マシューズの回答に基づいて使用したソリューションは次のとおりです。
これが私が最終的に得たものです: `
SELECT
o.title,
o.id,
op1.value AS start_date,
op2.value AS end_date
FROM object o
JOIN object_meta_values op1 ON op1.object_id=o.id AND op1.object_type_meta_id=28
JOIN object_meta_values op2 ON op2.object_id=o.id AND op2.object_type_meta_id=29
WHERE object_type_id = 11
AND (12 <= op1.value AND op1.value < 16 )
OR (12 < op2.value AND op2.value <= 16 )
OR (op1.value <= 12 AND 16 <= op2.value)
`。どうもありがとう!