вернуть значение встречающееся более 2 раз

Печать RSS
501


Пацак
0
DELIMITER // 
DROP FUNCTION IF EXISTS T_CUR // 
CREATE DEFINER = CURRENT_USER FUNCTION T_CUR() 
RETURNS VARCHAR(1024) CHARSET UTF8 
DETERMINISTIC 
LANGUAGE SQL 
SQL SECURITY INVOKER 
BEGIN 
DECLARE T_RET VARCHAR(1024) DEFAULT '';
DECLARE T_I, T_C, T_E BIGINT DEFAULT 0; 
DECLARE F_NAME, F_OPIS VARCHAR(1024) DEFAULT ''; 
DECLARE T_CURS CURSOR FOR SELECT `id`, `id_sd` FROM `ac_ac`; 
DECLARE EXIT HANDLER FOR NOT FOUND SET T_E:= 1; 
SET T_C:= (SELECT COUNT(`id`) FROM `ac_ac`); 
OPEN T_CURS; 
MW:LOOP 
FETCH T_CURS INTO F_NAME, F_OPIS; 
SET T_I:= T_I + 1; 
IF (SELECT COUNT(`id`) FROM `ac_ac` WHERE `id_sd` = F_OPIS) >= 2 THEN 
SET T_RET:= CONCAT_WS(',', T_RET, F_NAME); 
END IF; 
IF T_I >= T_C || T_E = 1 THEN LEAVE MW; END IF; 
END LOOP MW; 
CLOSE T_CURS; 
RETURN LEFT(RIGHT(T_RET) - 1, 1024); 
END // 
DELIMITER ; 

Хранимая функция выполняющая выборку повторяющихся два и более раз произвольное значение поля с именем `id_sd` и типом BIGINT UNSIGNED (большое целочисленное) и возвращает ее `id` перечисленные через запятую, таблицы с именем ac_ac которая в свою очередь имеет следующую структуру:
CREATE TABLE IF NOT EXISTS `ac_ac` 
( 
`id` SERIAL, 
`id_sd` BIGINT UNSIGNED NOT NULL, 
PRIMARY KEY (`id`), 
KEY (`id_sd`) 
) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci; 

Задача проста, подставьте нужные имена ячеек, и имя таблицы в функции на свои.
Залейте ее через phpMyAdmin, используйте как, встроенную функцию SQL в предложении SELECT исполняемого запроса в связке к примеру с IN.
Пожалуйста, пользуйтесь на здоровье)

Пацак
0
Eyler (26 Мая 2013 / 18:54)
и где же ваше решение? прекрасное, без изъянов, от гуру sql
Пост выше. Кушайте на здоровье)

Добавлено через 05:34 сек.
return в конце функции замените на
 
RETURN LEFT(RIGHT(T_RET, CHAR_LENGTH(T_RET) - 1), 1024); 

Затупила чуток. Прос устала сегодня ужс...
И
Автор
Пацак
0
смотрите когда тема была создана,сейчас мне уж точно не нужна ваша помощь,некрасиво ставить минусы человеку который действительно помог,в отличии от вас. и то, что предложили вы мне не подошло бы.

Пацак
0
14. Iznaur95, я на даты не смотрю, просто руку набиваю.
Увидела вопрос - ответила, чаще подталкиваю к правильному решению. Потавленные задачи решаю всегда, просто не всегда готовые ответы выкладываю.
Минус поставлен справедливо, Вы его по праву заслужили, выкладывая не рабочие, предварительно не испытанные, абсолютно не оптимизированные куски какокода. Использование которого может привести к не прадвиденным обстоятельствам связанных с потерей важных данных работающего ресурса. Ведь если Ваш визави не в курсе что, значит ROLLBACK и с чем его едят, а в предачу и создания бэкапа год назад было отложенно на завтра - сами понимаете, это - серьезные убытки последнего. Прежде чем выложить что то, посоветовать и тп проверьте это на работоспособность.
----
Мой код Вам не подойдет лишь в случае если у Вас версия mysql ниже 5.0.1. Просто тогда хранимые функции, циклы, курсоры и другие вкусняшки изпользуемые мной в теле функции не поддерживается сервером. Но и тогда не отчаивайтесь. Если у Вас выделенный сервер, обновите mysql до последней версии. Инструкцию ищите на оф сайте разработчика.
И
Автор
Пацак
0
вы мне минус не ставили,вы его поставили тому кто мне действительно помог,я понимаю вы гуру sql,но код выложенный Eyler рабочий(лишь немного подправил его,но тут уж моя вина т.к. я не правильно всё ему объяснил),а оптимизирован ли код уж решать ведущему разработчику.Наверно вам лучше на хабрахабр,возможно вы найдете программистов которые не сильно вам будут уступать в квалификации.

Пацак
0
16. Iznaur95, я на хабре и так достаточно частый гость. Именно там одна из статей помогла мне окончательно определится в жизни и выбрать в ней роль. Подтолкнув меня к изучению некоторых языков программирования. Хоть и учусь я не на программиста, это так хоби)
Л

Землянин
0
у девочки(сомнительно,конечно) разыгралось ЧСВ от того, что прочитала азбуку sql. Не обращайте внимания на дураков E
T

Землянин
0
Щас начнется!
И
Автор
Пацак
0
17. erika, я за вас рад. Если бы хабр помог вам уменьшить вашу заносчивость...
Изменил: Изнаур (26.05.2013 / 17:13)
M

Чатланин
0
TheFeST (26 Мая 2013 / 20:40)
у девочки(сомнительно,конечно) разыгралось ЧСВ от того, что прочитала азбуку sql. Не обращайте внимания на дураков E
++++
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск