ORDER BY Color和Hex Code作为MySQL的标准
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ORDER BY Color和Hex Code作为MySQL的标准,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2256字,纯文字阅读大概需要4分钟。
内容图文
![ORDER BY Color和Hex Code作为MySQL的标准](/upload/InfoBanner/zyjiaocheng/907/a377883cda2248c3b90e8d93826ea1c4.jpg)
我有一个包含产品颜色选项的表.颜色选项包括十六进制颜色代码,用于生成UI(HTML).
我想对行进行排序,以便UI中的颜色看起来像彩虹,而不是基于颜色名称排序的当前顺序(不是非常有用).
这是我的查询的样子.我从十六进制代码中得到R G B十进制值.我只是不知道如何订购它.
我研究了色差算法.它们似乎更有用于比较2种颜色的相似性,而不是排序.
我正在使用MySQL:
select a.*, (a.c_r + a.c_g + a.c_b) color_sum
from (
select co.customization_option_id,
co.designer_image_url,
concat(co.name, " (",cog.name, ")") name,
co.customization_option_group_id gr,
designer_hex_color,
conv(substr(designer_hex_color, 1, 2), 16, 10) c_r,
conv(substr(designer_hex_color, 3, 2), 16, 10) c_g,
conv(substr(designer_hex_color, 5, 2), 16, 10) c_b
from customization_options co
left join customization_option_groups cog
on cog.id = co.customization_option_group_id
where co.customization_id = 155
and co.customization_option_group_id
in (1,2,3,4)) a
order by ????
解决方法:
您希望按波长对十六进制代码进行排序,这大致映射到色调值.将十六进制代码指定为六个字符的字符串:RRGGBB.
你只需要创建一个接受十六进制代码字符串并输出色调值的函数,这里是公式from this Math.SO answer:
R’= R / 255
G’= G / 255
B’= B / 255
Cmax = max(R’,G’,B’)
Cmin = min(R’,G’,B’)
Δ= Cmax-Cmin
我想知道这是否有效,所以我在Ruby中制作了一个示例程序,它从RGB空间均匀地采样200种随机颜色,并对它们进行排序,输出看起来像彩虹!
这是Ruby源代码:
require 'paint'
def hex_to_rgb(hex)
/(?<r>..)(?<g>..)(?<b>..)/ =~ hex
[r,g,b].map {|cs| cs.to_i(16) }
end
def rgb_to_hue(r,g,b)
# normalize r, g and b
r_ = r / 255.0
g_ = g / 255.0
b_ = b / 255.0
c_min = [r_,g_,b_].min
c_max = [r_,g_,b_].max
delta = (c_max - c_min).to_f
# compute hue
hue = 60 * ((g_ - b_)/delta % 6) if c_max == r_
hue = 60 * ((b_ - r_)/delta + 2) if c_max == g_
hue = 60 * ((r_ - g_)/delta + 4) if c_max == b_
return hue
end
# sample uniformly at random from RGB space
colors = 200.times.map { (0..255).to_a.sample(3).map { |i| i.to_s(16).rjust(2, '0')}.join }
# sort by hue
colors.sort_by { |color| rgb_to_hue(*hex_to_rgb(color)) }.each do |color|
puts Paint[color, color]
end
注意,请确保gem安装paint以获取彩色文本输出.
这是输出:
将它编写为SQL用户定义的函数和ORDER BY RGB_to_HUE(hex_color_code)应该相对简单,但是,我的SQL知识非常基础.
编辑:我发布了关于将Ruby转换为SQL用户定义函数的this question on dba.SE.
内容总结
以上是互联网集市为您收集整理的ORDER BY Color和Hex Code作为MySQL的标准全部内容,希望文章能够帮你解决ORDER BY Color和Hex Code作为MySQL的标准所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。