mysql; проблемен селект
3 отговора
103 прегледа
mysql; проблемен селект
здравейте,
имам следния проблем:
tbl1 - ID e PK, PARAM - параметър (уникален)
------------------
ID * PARAM
------------------
1 * param1
2 * param45
.....
99 * param12
====================
tbl2
------------------
ID * TITLE
------------------
1 * towa e test <p="1">
2 * towa e wtori <p="2"> test <p="99"> testwam
......
Искам със селект заявка да направя следното:
------------------
ID * FORMATED
------------------
1 * towa e test <param1>
2 * towa e wtori <param45> test <param12> testwam
т.е. да заместя например това <p="2"> с PARAM от първата таблица, чиято стойност да взема от реда с ID=2
Бих могъл да направя селект и да попълня масив от първата таблица, после
с функции за заместване да направя тази операция, но се опасявам че ще става бавно - първата таблица има около 70 000 записа, от втората ще взимам
около 100, като във TITLE на всеки от тези 100 се срещат средно 10 записа (<p="2">) от първата.
10х предварително
имам следния проблем:
tbl1 - ID e PK, PARAM - параметър (уникален)
------------------
ID * PARAM
------------------
1 * param1
2 * param45
.....
99 * param12
====================
tbl2
------------------
ID * TITLE
------------------
1 * towa e test <p="1">
2 * towa e wtori <p="2"> test <p="99"> testwam
......
Искам със селект заявка да направя следното:
------------------
ID * FORMATED
------------------
1 * towa e test <param1>
2 * towa e wtori <param45> test <param12> testwam
т.е. да заместя например това <p="2"> с PARAM от първата таблица, чиято стойност да взема от реда с ID=2
Бих могъл да направя селект и да попълня масив от първата таблица, после
с функции за заместване да направя тази операция, но се опасявам че ще става бавно - първата таблица има около 70 000 записа, от втората ще взимам
около 100, като във TITLE на всеки от тези 100 се срещат средно 10 записа (<p="2">) от първата.
10х предварително
Re: mysql; проблемен селект
хм
то това май без код няма да мине...
по скоро ми прилича на проблем за perl и regular expressions
ако трябва да се реши с MySql + PHP (за MS SQL + ASP също е приложимо) предлагам горедолу следната стратегия:
вадиш всички записи от втората таблица
result_set1 = select alabala from table2 where .........
от тях правиш един масив с всички номерца, които ще ти трябват...правиш и един стринг от типа
str_where = '2', '23', '1267'...
след това от таблицата с параметрите вадиш само тези, които ти трябват
result_set2 = select alabala from tbl1 where id in str_where
така получаваш два резултсета и един масив....
въртиш цикъл от началото до края на първия резултсет
ако срещнеш <p="n"> заменяш с PARAM от втория резултсет където n=ID
ами това е, разучи как работят Reg Expr и ще си облекчиш живота...
[линк]
то това май без код няма да мине...
по скоро ми прилича на проблем за perl и regular expressions
ако трябва да се реши с MySql + PHP (за MS SQL + ASP също е приложимо) предлагам горедолу следната стратегия:
вадиш всички записи от втората таблица
result_set1 = select alabala from table2 where .........
от тях правиш един масив с всички номерца, които ще ти трябват...правиш и един стринг от типа
str_where = '2', '23', '1267'...
след това от таблицата с параметрите вадиш само тези, които ти трябват
result_set2 = select alabala from tbl1 where id in str_where
така получаваш два резултсета и един масив....
въртиш цикъл от началото до края на първия резултсет
ако срещнеш <p="n"> заменяш с PARAM от втория резултсет където n=ID
ами това е, разучи как работят Reg Expr и ще си облекчиш живота...
[линк]
Re: mysql; проблемен селект
Всъщност е възможно макар, че не е баш работа за база данни.... така де, не е гот да пазиш такива текстове
"towa e wtori <p="2"> test <p="99"> testwam" в таблица.
Ама ще ти трябва доста голямо въображение.
Трябва за измислиш някаква комбинация от
LOCATE(substr,str) за да хванеш къде се среща съответното <p=n> и REPLACE(str,from_str,to_str) за да замениш <p=2> със стойността от другата колонка на другата таблица дето си направил JOIN междувременно ... и изобщо става дявол на магаре.
Със subselect като, че ли звучи мааалко по-приемливо, но като цяло най-добре си преразгледай целия дизайн на таблиците.
Защото ако знаеш, че имаш само едно такова <p=> е сравнително лесно. Ако са N на брой (фиксиран) също може да се измисли нещо, но ако са от 0 до неизвестно колко - ще ти се отрови живота дори и да успееш.
salle.online.bg/sig
"towa e wtori <p="2"> test <p="99"> testwam" в таблица.
Ама ще ти трябва доста голямо въображение.
Трябва за измислиш някаква комбинация от
LOCATE(substr,str) за да хванеш къде се среща съответното <p=n> и REPLACE(str,from_str,to_str) за да замениш <p=2> със стойността от другата колонка на другата таблица дето си направил JOIN междувременно ... и изобщо става дявол на магаре.
Със subselect като, че ли звучи мааалко по-приемливо, но като цяло най-добре си преразгледай целия дизайн на таблиците.
Защото ако знаеш, че имаш само едно такова <p=> е сравнително лесно. Ако са N на брой (фиксиран) също може да се измисли нещо, но ако са от 0 до неизвестно колко - ще ти се отрови живота дори и да успееш.
salle.online.bg/sig