我极大地简化了整个系统,但足以满足我的特定问题。
我将一张照片的信息存储在表中,该照片已被缩小了几倍(保持其纵横比)。
我正在尝试对我的表设计一个查询,以获取最合适的照片。

我最恰当的意思是


如果要求宽度为705像素,则在这种情况下将返回最大的宽度700x394
如果我要求宽度为50px,则在这种情况下将返回最小的宽度150x84


样本数据照片调整尺寸

  700x394
  400x200
  300x169
  150xx84


更多信息


数据库中的图像均使用参考边缘按比例缩小。
参考边缘是最长的边缘,这意味着如果我收到人像照片,则会按比例缩小为* x700,* x400,* x300,* x150。
如果图像是横向的,则将以700x *,400x *,300x *,150x *的相同方式缩小尺寸


此查询从0到最大边缘或更低范围内部分起作用。但是,如果我请求的尺寸超过了最大宽度,那将无法正常工作。

select * from images
WHERE width >= 750
order by width asc
limit 1


我也有这个工作技巧,可以根据人像或风景改变逻辑

IFNULL(((width >= height AND width >= $length ) OR (width <= height AND height >= $length )), TRUE)


我有一个SQL提琴,这里列出了我的问题/问题

任何见识将不胜感激。我知道我可以读取所有数据,然后以后端语言(例如PHP)执行此逻辑,但这是对数据管道的高要求,并且希望将开销降至最低。

小提琴:http://sqlfiddle.com/#!9/91ca9/2

最佳答案

尝试这个

SELECT *
FROM images
ORDER BY ABS(width-750) ASC
LIMIT 1


使用宽度的绝对值减去请求的尺寸,它将返回最接近的图像尺寸。我确定您可以调整高度,因为您还需要检查身高

关于mysql - SQL条件逻辑选择“最合适的”记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30538114/

10-13 08:47