[MYSQL] SELECT dla zserializowanych danych...
adpawl - 04-04-2007 00:01
[MYSQL] SELECT dla zserializowanych danych...
Witajcie!
Mam sobie tabele z polem "data" zawierającym zmienne i ich wartości - w postaci zserializowanej tablicy array.
Wygląda to więc przykładowo tak: sesja|N;zmienna1|s:8:"wartosc1";zmienna2|s:8:"wart osc2";zmienna3|s:8:"wartosc3
Mam teraz problem, jak skonstruaować zapytanie SELECT wybierające te rekordy gdzie w polu "data" jakaś wybrana zmienna np. "zmienna2" = jakaś wartość np. "wartosc2" ???
Zaznaczam, że budowa tegoż pola może się znacząco różnić(np. fragmentem "s:8:") jak i kolejnością i liczbą zmiennych
Ma ktoś jakiś pomysł?
=?iso-8859-2?q?Filip_Rembia=B3kowski?= - 04-04-2007 00:02
On 3 Kwi, 10:05, "adpawl" <adp...@onet.eu> wrote:
> Mam sobie tabele z polem "data" zawierającym zmienne i ich wartości -w > postaci zserializowanej tablicy array. > > Wygląda to więc przykładowo tak: > sesja|N;zmienna1|s:8:"wartosc1";zmienna2|s:8:"wart osc2";zmienna3|s:8:"wartosc3 > > Mam teraz problem, jak skonstruaować zapytanie SELECT wybierające te rekordy > gdzie w polu "data" jakaś wybrana zmienna np. "zmienna2" = jakaś wartość np. > "wartosc2" > ??? > > Zaznaczam, że budowa tegoż pola może się znacząco różnić(np. fragmentem > "s:8:") jak i kolejnością i liczbą zmiennych > > Ma ktoś jakiś pomysł?
1. znormalizować i nie robić tego na przyszłość 2. jak się dało zserializować, to da sie pewnie zdeserializować? ;) inaczej mówiąc program który wstawia dane w tej formie powinien też móc je odczytać 3. http://www.kanolife.com/escape/2006/...-splitter.html 4. podobno mysql 5.0 ma procedury składowane. mozna chyba napisać sobie kilka funkcji użytkownika? np. get_variable( rowid, varname ) i potem stosować prostsze zapytania SELECT * FROM tabela WHERE get_variable( tabela.id, 'zmienna2' ) = 'wartość zmiennej 2';
adpawl - 04-04-2007 00:02
Użytkownik "Filip Rembiałkowski" <plk.zuber@gmail.com> napisał w wiadomości :
>1. znormalizować i nie robić tego na przyszłość >2. jak się dało zserializować, to da sie pewnie zdeserializować? ;) >inaczej mówiąc program który wstawia dane w tej formie powinien też >móc je odczytać >3. http://www.kanolife.com/escape/2006/...-splitter.html >4. podobno mysql 5.0 ma procedury składowane. mozna chyba napisać >sobie kilka funkcji użytkownika? >np. get_variable( rowid, varname ) i potem stosować prostsze zapytania >SELECT * FROM tabela WHERE get_variable( tabela.id, 'zmienna2' ) = >'wartość zmiennej 2';
1-w tym konkretnym przypadku kompletnie odpada 2 - pewnie że się da ale musiał bym chyba przetworzyć w skrypcie wszystkie rekordy i wybrać wtedy te spełniające warunek, mi zaś chodzi o wybór na poziomie mysql'a 3 - też nic mi nie daje 4 - to już prędzej, poczytam na ten temat
dokonałem drobnych zmian i teraz szukana wartość jest unikalna przez co da się wybrać zwykłym LIKE
Nadal ciekawi mnie jednak, czy znalazł by się jakiś sposób na tego SELECTa gdyby szukana wartość nie była unikalną...
Maciek Dobrzanski - 05-04-2007 00:04
"adpawl" <adpawl@onet.eu> wrote in message news:eut1t2$hfn$1@news.onet.pl...
> Mam teraz problem, jak skonstruaować zapytanie SELECT wybierające te > rekordy gdzie w polu "data" jakaś wybrana zmienna np. "zmienna2" = jakaś > wartość np. "wartosc2" > ???
Jak to jednorazowa operacja to może nawet teoretycznie REGEXPem, choć przy pewnych wartościach kolumny z danymi sesji może nie dać to prawidłowych wyników. Jak to trwałe rozwiązanie to albo wymusić odpowiednie zmiany, albo sobie strzelić... kielona i mieć dobre samopoczucie i ostatecznie ratować się UDFem napisanym w jakimś C.
Maciek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|