powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
7 сообщений из 7, страница 1 из 1
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #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
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #40128932
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно ну вообще ничего.

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

В принципе ХП могут быть и итеративные, и даже рекурсивные - так что пока что ничего не мешает...
...
Рейтинг: 0 / 0
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #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
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #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
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #40129231
FateFlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выглядит элегантно :) Спасибо!
...
Рейтинг: 0 / 0
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #40129475
FateFlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как эффективнее индекс для такой таблицы построить? Видимо индекс для каждого столбца отдельно нужен?
...
Рейтинг: 0 / 0
Поиск в таблице по условиям из этой же таблицы с помощью хранимой процедуры.
    #40129480
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FateFlex
Видимо индекс для каждого столбца отдельно нужен?

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

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


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