Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры. / 7 сообщений из 7, страница 1 из 1
24.01.2022, 10:05
    #40128929
FateFlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
Здравствуйте.
Очень охота сделать хранимую процедуру, которая:
1 берёт запись по `index` из таблицы
2 вынимает из этой записи условия поиска `value`, `minimum` и `maximum`
3 ищет другие записи, `value` которых находится между `minimum` и `maximum` исходной записи (по `index`)
4 причём собственное `value` записи (по `index`) должно встречно укладываться между `minimum` и `maximum` искомых записей

Можно в хранимых процедурах MySQL такое сделать? Если можно, то хотелось бы ссылку на похожий пример хотя бы :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DELIMITER $$

DROP PROCEDURE IF EXISTS `find`;
CREATE PROCEDURE `find` (IN `index` BIGINT UNSIGNED)
BEGIN 
	-- how to do ?
END $$

DELIMITER ;

DROP TABLE IF EXISTS `table`;
CREATE TABLE `table`
(
	`index` BIGINT UNSIGNED PRIMARY KEY,
	`value` TINYINT UNSIGNED NOT NULL INDEX,
	`minimum` TINYINT UNSIGNED NOT NULL INDEX,
	`maximum` TINYINT UNSIGNED NOT NULL INDEX
);
...
Рейтинг: 0 / 0
24.01.2022, 10:20
    #40128932
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
Непонятно ну вообще ничего.

Покажи нужное на примере - дай INSERT INTO с данными (3-5 записей), требуемый результат, и подробно поясни, как именно результат получен.

В принципе ХП могут быть и итеративные, и даже рекурсивные - так что пока что ничего не мешает...
...
Рейтинг: 0 / 0
24.01.2022, 16:05
    #40129082
FateFlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
Собственно эти два SELECT как в хранимой процедуре разместить и как из результатов первого SELECT взять результат и уже по нему выполнить второй SELECT?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table`
(
	`index` BIGINT UNSIGNED PRIMARY KEY,
	`value` TINYINT UNSIGNED NOT NULL,
	`minimum` TINYINT UNSIGNED NOT NULL,
	`maximum` TINYINT UNSIGNED NOT NULL
);

INSERT INTO `table` VALUES
(1, 1, 3, 5),
(2, 4, 5, 5),
(3, 2, 2, 4),
(4, 5, 4, 3),
(5, 3, 1, 5);

SELECT `value`, `minimum`, `maximum`
FROM `table`
WHERE `index` = 1;

+-------+---------+---------+
| value | minimum | maximum |
+-------+---------+---------+
|     1 |       3 |       5 |
+-------+---------+---------+

SELECT `index`
FROM `table`
WHERE `index` != 1
AND `minimum` <= 1
AND 1 <= `maximum`
AND 3 <= `value`
AND `value` <= 5
LIMIT 1;

+-------+
| index |
+-------+
|     5 |
+-------+
...
Рейтинг: 0 / 0
24.01.2022, 21:04
    #40129166
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT t2.index  
    -- t1.*, t2.*
FROM `table` t1
JOIN `table` t2 ON t1.value BETWEEN t2.minimum AND t2.maximum
               AND t2.value BETWEEN t1.minimum AND t1.maximum
WHERE t1.index = 1


https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=311fc5fce5e6da6e7d496a658cd10ce2
...
Рейтинг: 0 / 0
25.01.2022, 11:46
    #40129231
FateFlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
Выглядит элегантно :) Спасибо!
...
Рейтинг: 0 / 0
26.01.2022, 10:07
    #40129475
FateFlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
А как эффективнее индекс для такой таблицы построить? Видимо индекс для каждого столбца отдельно нужен?
...
Рейтинг: 0 / 0
26.01.2022, 10:10
    #40129480
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
FateFlex
Видимо индекс для каждого столбца отдельно нужен?

Одна копия таблицы может использовать только один индекс. Поэтому композитный индекс обычно эффективнее отдельных индексов по отдельным полям.

для показанного запроса, вероятно, эффективным будет индекс
Код: sql
1.
CREATE INDEX idx ON `table` (minimum, maximum, value);
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры. / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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