我将用户上传的图像文件中的无数属性存储在一个表中。表的基本结构如下:
attrib_id | image_id | attrib_name | attrib_value
除了像TAG
和CAPTION
这样的属性外,我还以同样的方式存储图像位置的LATITUDE
和LONGITUDE
。所有列都是varchar
类型。
我正在尝试查询与给定边界框内的位置相关联的图像 - 输入是上下纬度,开始和结束经度。查询的输出应该是image_id
s列表,其中包含name=LATITUDE
和value BETWEEN upper and lower latitude
的行,以及经度相同的行。
由于所有的值都是字符串,并且在同一列中,我真的不知道从哪一个开始。
虽然我愿意考虑重组表格,但我的直觉告诉我,有一种方法可以在SQL中实现这一点。
我的数据库目前是MySql,但我将来可能会切换到Postgres,所以我更喜欢非供应商特定的解决方案。
你可以这样做:
SELECT * FROM Table lat
INNER JOIN Table lon ON lat.image_id = lon.image_id
WHERE (lon.attrib_name = 'LONGITUDE' AND lon.attrib_value BETWEEN start AND end) AND
(lat.attrib_name = 'LATITUDE' AND lat.attrib_value BETWEEN upper AND lower)
不确定Postgres是否支持BETWEEN
或迁移到的任何地方,因此您可以使用<
和>
运算符。