Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

ĐẶT HÀNG THEO Màu với Mã Hex làm tiêu chí trong MySQL

Bạn muốn sắp xếp mã hex theo bước sóng, điều này gần như ánh xạ vào giá trị màu. Đưa ra một mã hexcode dưới dạng một chuỗi sáu ký tự:RRGGBB .

Bạn chỉ cần tạo một hàm nhận chuỗi hexcode và xuất ra giá trị màu, đây là công thức từ câu trả lời Math.SO này :

R '=R / 255

G '=G / 255

B '=B / 255

Cmax =max (R ', G', B ')

Cmin =min (R ', G', B ')

Δ =Cmax - Cmin

Tôi muốn xem điều này có hiệu quả không, vì vậy tôi đã tạo ra một chương trình mẫu trong Ruby, nó lấy mẫu 200 màu ngẫu nhiên đồng nhất từ ​​không gian RGB và sắp xếp chúng, đầu ra trông giống như một cầu vồng!

Đây là nguồn 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

Lưu ý, hãy đảm bảo gem install paint để nhận đầu ra văn bản màu.

Đây là kết quả:

Sẽ tương đối dễ hiểu khi viết đây là một hàm do người dùng SQL xác định và ĐẶT HÀNG BẰNG RGB_to_HUE (hex_color_code), tuy nhiên, kiến ​​thức SQL của tôi khá cơ bản.

CHỈNH SỬA:Tôi đã đăng câu hỏi này trên dba.SE về việc chuyển đổi Ruby thành một hàm do người dùng SQL xác định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao truy vấn mysql này (với là kiểm tra null) lại chậm hơn truy vấn khác?

  2. Khả năng tương tác của SQL-Server và MySQL?

  3. Có giao diện người dùng mysql dựa trên văn bản không?

  4. Cách cài đặt MySQL trên Debian 7

  5. Làm cách nào để thay đổi BỘ KÝ TỰ (và BỘ LẠNH) trong toàn bộ cơ sở dữ liệu?