War*_*asm 5 mysql sql entity-attribute-value
我有 2 张桌子:
桌子objects:
object_id | object_group_id
Run Code Online (Sandbox Code Playgroud)
桌子attributes:
attr_id | attr_object_id | attr_property_id | attr_value
Run Code Online (Sandbox Code Playgroud)
现在,我想获取所有object_id位置object_group_id = 1并过滤两个属性:
(attr_property_id = 1 AND attr_value <= '100000')
AND
(attr_property_id = 2 AND attr_value > '2000')
Run Code Online (Sandbox Code Playgroud)
我试图构建一些查询,如下所示:
SELECT * FROM objects as o
/* filter1 join */
INNER JOIN
attributes AS f1
ON
o.object_id = f1.attr_object_id
AND
f1.attr_property_id = 1
/* filter2 join */
INNER JOIN
attributes AS f2
ON
f1.attr_object_id = f2.attr_object_id
AND
f2.attr_property_id = 2
WHERE
o.object_group_id = 1
AND
f1.attr_value <= '100000'
AND
f2.attr_value > '2000'
Run Code Online (Sandbox Code Playgroud)
...但仍然无法得到我需要的东西。
经过几个小时的组合和尝试,我终于做到了:
SELECT * FROM objects as o
/* filter1 join */
INNER JOIN
attributes AS f1
ON
o.object_id = f1.attr_object_id
AND
f1.attr_property_id = 1
AND
f1.attr_value <= '100000'
/* filter2 join */
INNER JOIN
attributes AS f2
ON
f1.attr_object_id = f2.attr_object_id
AND
f2.attr_property_id = 2
AND
f2.attr_value > '2000'
WHERE
o.object_group_id = 1
Run Code Online (Sandbox Code Playgroud)
我太接近了,并通过将所有过滤条件移至 来完成此操作INNER JOIN。
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |