powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
10 сообщений из 10, страница 1 из 1
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318152
На картинке сетка 10х10=100 кубиков.

Создана БД, 100 строк, поля: id,x,y,s. Одна строка = один кубик.
x,y - координаты левого верхнего угла кубика.
Таким образом перечислены ВСЕ кубики, т.е.:

В БД хранятся закрашенные области (серый цвет), как несколько строк, у которых поле s=1. координаты левого верхнего угла, т.е. ДВА числа (х,у).

Запросом в БД хочу получить список кубиков данной сетки (они же кубики 1х1, они же строки), которые удовлетворяют условию
1. если под свободным кубиком есть свободный кубик, то я беру оба кубика (т.е. нужны координаты этих обоих кубиков).
2. если свободный кубик имеет справа свободный и под собой свободный и вправо и вниз свободный (т.е. в результате образуется КУБ 2х2), то беру все 4 кубика.
3. Ну и прямоугольники тоже нужны.

Т.е. в итоге для данного рисунка я должен получить:
по 1 условию - id=3,13; id=7,17; id=8,18; id=10,20 и тд. По сути нужен первый результат, дальше отбросить можно.
по 2 условию - id=7,8,17,18; следующий куб 2х2 где-то в центре сетки будет.
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318160
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тупо в лоб "математизируешь" свои словеса с учётом требований SQL-синтаксиса... по первому пункту получится
Код: sql
1.
2.
3.
4.
5.
6.
select t1.*, t2.*
from table t1, table t2
where t1.x=t2.x
  and t1.y=t2.y-1
  and t1.s=0
  and t2.s=0


По второму пункту потребуется, сабо самой, 4 копии таблицы.
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318186
хм.. а я чо-то полез вот в эти дебри, искать через id+10, т.е. это id нижележащего кубика...:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT t1.id
FROM (SELECT * FROM test WHERE s=3 ) t1
WHERE EXISTS
         (SELECT id
          FROM test t2
          WHERE t2.id IN (t1.id + 10, t1.id - 10))
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318187
ой, s=0 конечно же!!!
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318193
Akina,

немного с ошибкой ищет... скрин приложил
серое - то что s=1
оранжевое - то , что выдает запрос, кое-где под серыми областями белые зоны по идее должны быть оранжевыми, ниже ведь есть свободные кубики
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318206
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда в студию (и под спойлер... и проверить...) скрипты создания и наполнения, а также эталонный ответ. Не самим же нам всё это для тебя создавать.
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318211
DROP TABLE IF EXISTS `all_items_10x10`;
CREATE TABLE `all_items_10x10` (
`id` int(11) NOT NULL,
`x` smallint(4) NOT NULL,
`y` smallint(4) NOT NULL,
`s` tinyint(1) NOT NULL,
`order_id` int(11) NOT NULL COMMENT 'uniq id from new order'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

INSERT INTO `all_items_10x10` (`id`, `x`, `y`, `s`, `order_id`) VALUES
(1, 0, 0, 0, 0),
(2, 1, 0, 0, 0),
(3, 2, 0, 0, 0),
(4, 3, 0, 1, 111111),
(5, 4, 0, 1, 111111),
(6, 5, 0, 1, 111111),
(7, 6, 0, 0, 0),
(8, 7, 0, 0, 0),
(9, 8, 0, 1, 222222),
(10, 9, 0, 0, 0),
(11, 0, 1, 1, 333333),
(12, 1, 1, 1, 333333),
(13, 2, 1, 0, 0),
(14, 3, 1, 1, 111111),
(15, 4, 1, 1, 111111),
(16, 5, 1, 1, 111111),
(17, 6, 1, 0, 0),
(18, 7, 1, 0, 0),
(19, 8, 1, 1, 222222),
(20, 9, 1, 0, 0),
(21, 0, 2, 0, 0),
(22, 1, 2, 0, 0),
(23, 2, 2, 0, 0),
(24, 3, 2, 1, 111111),
(25, 4, 2, 1, 111111),
(26, 5, 2, 1, 111111),
(27, 6, 2, 0, 0),
(28, 7, 2, 0, 0),
(29, 8, 2, 0, 0),
(30, 9, 2, 0, 0),
(31, 0, 3, 1, 444444),
(32, 1, 3, 1, 444444),
(33, 2, 3, 0, 0),
(34, 3, 3, 1, 111111),
(35, 4, 3, 1, 111111),
(36, 5, 3, 1, 111111),
(37, 6, 3, 0, 0),
(38, 7, 3, 1, 555555),
(39, 8, 3, 1, 555555),
(40, 9, 3, 0, 0),
(41, 0, 4, 1, 444444),
(42, 1, 4, 1, 444444),
(43, 2, 4, 0, 0),
(44, 3, 4, 0, 0),
(45, 4, 4, 0, 0),
(46, 5, 4, 0, 0),
(47, 6, 4, 0, 0),
(48, 7, 4, 1, 555555),
(49, 8, 4, 1, 555555),
(50, 9, 4, 0, 0),
(51, 0, 5, 0, 0),
(52, 1, 5, 0, 0),
(53, 2, 5, 0, 0),
(54, 3, 5, 0, 0),
(55, 4, 5, 0, 0),
(56, 5, 5, 0, 0),
(57, 6, 5, 0, 0),
(58, 7, 5, 1, 555555),
(59, 8, 5, 1, 555555),
(60, 9, 5, 0, 0),
(61, 0, 6, 0, 0),
(62, 1, 6, 1, 666666),
(63, 2, 6, 1, 666666),
(64, 3, 6, 1, 666666),
(65, 4, 6, 1, 666666),
(66, 5, 6, 1, 666666),
(67, 6, 6, 0, 0),
(68, 7, 6, 1, 555555),
(69, 8, 6, 1, 555555),
(70, 9, 6, 0, 0),
(71, 0, 7, 0, 0),
(72, 1, 7, 0, 0),
(73, 2, 7, 0, 0),
(74, 3, 7, 0, 0),
(75, 4, 7, 0, 0),
(76, 5, 7, 0, 0),
(77, 6, 7, 0, 0),
(78, 7, 7, 0, 0),
(79, 8, 7, 0, 0),
(80, 9, 7, 0, 0),
(81, 0, 8, 0, 0),
(82, 1, 8, 1, 777777),
(83, 2, 8, 0, 0),
(84, 3, 8, 0, 0),
(85, 4, 8, 0, 0),
(86, 5, 8, 0, 0),
(87, 6, 8, 0, 0),
(88, 7, 8, 0, 0),
(89, 8, 8, 0, 0),
(90, 9, 8, 0, 0),
(91, 0, 9, 0, 0),
(92, 1, 9, 1, 777777),
(93, 2, 9, 0, 0),
(94, 3, 9, 0, 0),
(95, 4, 9, 0, 0),
(96, 5, 9, 0, 0),
(97, 6, 9, 0, 0),
(98, 7, 9, 0, 0),
(99, 8, 9, 0, 0),
(100, 9, 9, 0, 0);
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318213
запрос:
select t1.*, t2.*
from all_items_10x10 t1, all_items_10x10 t2
where t1.x=t2.x
and t1.y=t2.y-1
and t1.s=0
and t2.s=0
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318217
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Олег Котейкин , на ТВОИХ данных 19725975 запустил ТВОЙ запрос 19725978 . Полученный результат АБСОЛЮТНО правильный - ровно 44 записи, ни одной пропущенной, ни одной ошибочной.
...
Рейтинг: 0 / 0
Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
    #39318222
ммм. значит, вывод неправильно я организовал. да, рисунок если сместить на строку выше, то получается, все четко. да, спасибо! видно руку профи!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как проапдейтить свободные ячейки по условию, ячейки в сетке 10х10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]