Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

14.09.2009, 19:57
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Итак, никто не хочет остальные методы решения для прошлой задачи придумывать - ну и ладно =)
Еще одна задачка. На мой взгляд более интересная.
Имеется в наличии такая вот табличка
Код:
--------------------------------
model | name | maker
--------------------------------
1035 | pliers | F
1103 | pestle | A
1104 | key | G
1132 | nippers | G
1273 | gavel | F
1314 | chisel | A
1402 | mortar | B
1561 | bottle | F
Необходимо добавить столбец с номерами строк (т.е. номер кортежа - и собственно кортеж), в порядке возрастания модели.
Пользоваться можно ТОЛЬКО средствами, предусмотренными стандартом SQL-92 (т.е. без всяких rank(), row_number() и подобных функций), а так же без временных таблиц и иже с ними.
По хорошему - это один запрос (ну, возможно с коррелирующим подзапросом, но можно сделать и без него).
В итоге мы должны получить примерно следующее:
Код:
----------------------------------------
num | model | name | maker
----------------------------------------
1 | 1035 | pliers | F
2 | 1103 | pestle | A
... | ... | ... | ...
Ну и по традиции дамп:
Код:
CREATE TABLE `tst2` (
`model` INT( 3 ) NOT NULL ,
`name` VARCHAR( 20 ) NOT NULL ,
`maker` CHAR( 1 ) NOT NULL ,
PRIMARY KEY ( `model` )
);
INSERT INTO `tst2` VALUES
('1104','key','G'),
('1273','gavel','F'),
('1035','pliers','F'),
('1132','nippers','G'),
('1314','chisel','A'),
('1103','pestle','A'),
('1402','mortar','B'),
('1561','bottle','F')
|
|
|

26.09.2009, 21:13
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Неужто никому размять мозги не хочется? Задачка то плевая.
Или все "к0вычк0ми" мозг забили? 
|
|
|

26.09.2009, 21:34
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
нет, ну почему, интересно, просто на практике нафиг такое никогда не понадобиться. Лучше бы чонить жизненное, что могло бы хоть когда нибудь пригодиться.
|
|
|

26.09.2009, 21:55
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
Сообщение от Pashkela
нет, ну почему, интересно, просто на практике нафиг такое никогда не понадобиться. Лучше бы чонить жизненное, что могло бы хоть когда нибудь пригодиться.
А представь прийдется поработать со старой СУБД? В жизни всякое бывает =) Относительно недавно это не так уж и редко использовалось на практике.
|
|
|

26.09.2009, 23:03
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
<spoiler>
select count(*) as num, current.*
from test as current, test
where current.model >= test.model
group by current.model
order by current.model asc
</spoiler>
|
|
|

27.09.2009, 10:26
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
astrologer - молодец =)
|
|
|

26.10.2009, 17:12
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
На этот раз проверим как у нас обстоят дела с работой со строками.
Задача:
есть таблица с единственным полем, в котором записаны cтроки вида
Код:
sdfdf_efgregehmtri_ref_WEFEW_reg_regbb
На выходе нужно заменить все что находится между первым и последним символами "_" на "*".
Т.е. по вышеприведенной строке должно получится такое:
Код:
sdfdf_**************************_regbb
Вот небольшой дамп (хотя легче самим что нить набить (предварительно подумав), дабы отловить некоторые "подводные камни" и т.п.):
Код:
CREATE TABLE IF NOT EXISTS `tst` (
`field` varchar(40) NOT NULL
);
INSERT INTO `tst` (`field`) VALUES
('aaaa_wd_regr_dew_bbbb'),
('asd_sed_fergf')
Реализации для конкретных СУБД могут немного отличаться, но суть от этого не меняется.
upd: естественно как всегда ответ - единственный запрос. Без рекурсий и тп. Так же никаких хп. Ну в общем вы поняли =)
|
|
|

26.10.2009, 19:43
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
хз, это, наверно, извращенный метод, но что пришло в голову =)
Код:
select concat_ws('_',
substring_index(url, '_', 1),
repeat('*', length(url) - length(substring_index(url, '_', 1)) -
length(substring_index(url, '_', -1)) - 2),
substring_index(url, '_', -1)) as str from t1;
|
|
|

26.10.2009, 23:31
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме: 804931
Репутация:
526
|
|
В принципе ход мысли правильный... Хотя ничего особо сложного в данной задачке нет =) Но все равно молодец)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|