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