mysql; проблемен селект

3 отговора 103 прегледа
#1

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х предварително

Отговор
в отговор на q2 #2

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 и ще си облекчиш живота...

[линк]
Отговор
в отговор на q2 #3

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
Отговор
в отговор на salle #4

Re: mysql; проблемен селект

е, от примера се вижда че са различен брой...

[линк]
Отговор