2013-04-15 7 views
1

Я немного знаком с MySQL, но, думая о реализации этой функции, мой мозг болит. Мне нужна система, в которой вы можете установить «стоимость» области между координатами X = 20 Y = 20 WIDTH = 20 HEIGHT = 20 по цене 15 на пиксель, теперь, если вы разместите другую область в этой области, скажем, в X = 25, Y = 25, WIDTH = 10, HEIGHT = 10 по цене 5 на пиксель, предыдущая область разбита на 4 части, а середина вытирается в пользу этой области.Продвинутые области MySQL стоят

Я также хотел бы иметь возможность рассчитать «стоимость» области между определенными пикселями. Надеюсь, я объяснил это так, как вы понимаете большинство. Я не знаю, с чего начать.

+0

Почему предыдущая зона разбита на 4 части? – dbf

+0

больше математического вопроса, чем программирования – 2013-04-15 20:54:10

+0

+1. , , Мне кажется, что это очень интересный вопрос в базе данных. –

ответ

2

Я бы подошел к этому, сохранив все области с приоритетом, а затем получая стоимость на пиксельной основе.

Таким образом, стоимость одного пикселя будет:

select c.* 
from costs c 
where PIXELX between c.x and c.x + c.deltax and PIXELY between c.y + c.deltay 
order by priority desc 
limit 1 

Чтобы распространить эту область пикселей, вы бы расширить область в набор пикселей. Я рекомендовал бы в numbers таблицу, чтобы помочь с этим:

select x.num as x, y.num as y 
from numbers x cross join 
    numbers y 
where x.num between PIXELX and PIXELX and DELTAX and 
     y.num between PIXELY and PIXELY and DELTAY 

Теперь объединить эти идеи, чтобы получить все возможные затраты для данного пикселя:

select x.num as x, y.num as y, max(priority) as maxpriority 
from numbers x cross join 
    numbers y join 
    costs c 
    on x.num between c.x and c.x + c.deltax and y.num between c.y + c.deltay 
where x.value between PIXELX and PIXELX and DELTAX and 
     y.value between PIXELY and PIXELY and DELTAY 
group by x.num, y.num 

Наконец, присоединиться затраты в для данного приоритет:

select sum(c.cost) 
from (select x.num as x, y.num as y, max(priority) as maxpriority 
     from numbers x cross join 
      numbers y join 
      costs c 
      on x.num between c.x and c.x + c.deltax and y.num between c.y + c.deltay 
     where x.value between PIXELX and PIXELX and DELTAX and 
      y.value between PIXELY and PIXELY and DELTAY 
     group by x.num, y.num 
    ) xyp join 
    costs c 
    on xyp.x between c.x and c.x + c.deltax and xyp.y between c.y + c.deltay and 
     xyp.maxpriority = c.priority 
+0

ЭТО НАСТОЯЩАЯ ЖИЗНЬ. Это две отдельные таблицы правильные? Как выглядит их структура? – user2279927

+0

Кто-нибудь? Это похоже на китайский для меня – user2279927

-1

думать о реализации этой функции делает мой мозг больно

Да, мой тоже! Хммм ... это звучит очень знакомо - потому что это было сделано раньше на milliondollarhomepage

Возможно, вы могли вместо этого использовать или адаптировать готовое решение, такое как Gpix, или же «сценарий рекламной рекламы для Google».

+0

Это ничего не значит что я ищу. – user2279927

Смежные вопросы