Portál AbcLinuxu, 30. dubna 2024 07:04


Dotaz: MySQL LIKE nebo REGEXP

25.2.2015 17:35 Andy
MySQL LIKE nebo REGEXP
Přečteno: 826×
Odpovědět | Admin
Ahoj, nevim jestli jsem ve spravne kategorii ale problem je nasledujici: Mam v databazi 2 radky z asi takovymto obsahem
7|1#9|1,5,7#10|2,4,51#
7|1#9|1,4,5#10|1,3,38#
ucelem je vybrat pouze radek z ID 9 a hodnotou 4 coz je druhy radek Zkousel jsem to pomoci LIKE
sloupec LIKE "9|4#%" OR 
sloupec LIKE "%#9|4#%" OR 
sloupec LIKE "%#9|%,4#%" OR 
sloupec LIKE "%#9|%,4,%#%" OR 
sloupec LIKE "%#9|4,%#%"
ale to vybere oba sloupce, chtel jsem to zkusit pomoci REGEXP ale priznam se ze regulerni vyrazy jsem nikdy neosilil.

Poradil by nekdo prosim nejake reseni?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

wamba avatar 25.2.2015 19:09 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Odpovědět | | Sbalit | Link | Blokovat | Admin
(Perl-)regexp by mohl vypadat třeba takhle: \b9[|][\d,]*\b4\b
This would have been so hard to fix when you don't know that there is in fact an easy fix.
26.2.2015 14:08 Andy
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Diky za nakopnuti po par pokusech mi z toho vylezlo pro mysql REGEXP '9[|][^#]*4' a vypada to ze funguje jak ma
10.3.2015 08:54 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
tohle nebude fungovat asi úplně podle představy matchne to třeba i 19|14, ..

Mělo by to být spíš měco jako '(^|#)9\|(4[,#]|([\d]+,)+4[,#])'
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
10.3.2015 13:35 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
lze ještě zkrátit na
(^|#)9\|(([\d]+,)*4[,#])
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
25.2.2015 19:37 Filip Jirsák
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chcete to dělat jednorázově, nebo opakovaně? V druhém případě se určitě vyplatí ta data normalizovat, tj. rozparsovat je a uložit do samostatných tabulek. K tomu relační databáze slouží.
26.2.2015 14:10 Andy
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Opakovan ale ne tak casto abych kvuli tomu predelaval cely system ...
26.2.2015 17:24 Filip Jirsák
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Myslím, že by nebylo nutné předělávat celý systém - stačil by trigger, který by při zápisu do té zdrojové tabulky data rozparsoval a zapsal do dalších tabulek. Podle mne je to asi tak stejně pracné, jako vyrábět ten dotaz, který vyhledává v těch nestrukturovaných datech.
rADOn avatar 9.3.2015 16:55 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Ze se namahas… Jestli tam ma nejake netrivialni mnozstvi dat tak ho to velice rychle donuti samo :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Josef Kufner avatar 14.3.2015 14:01 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Případně si tu jednu zajímavou hodnotu vytáhnout do druhého sloupečku a nechat zbytek jako blob, se kterým se nijak nepracuje. To celkem běžně dělám se složitějšími daty v JSON, pokud (!) s nimi na úrovni databáze nepracuji. Mít jeden nebo několik málo sloupečků z takových dat vypočítávaných pro potřeby databáze je celkem praktické a ušetří to kopec práce.
Hello world ! Segmentation fault (core dumped)
xkucf03 avatar 15.3.2015 12:14 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: MySQL LIKE nebo REGEXP
Odpovědět | | Sbalit | Link | Blokovat | Admin

Doporučuji přečíst si něco o návrhu datového modelu a normalizaci. Je to velice užitečné a ušetříš si tím spoustu práce.

Jestliže s těmi daty chceš pracovat na úrovni databáze, tak ty hrůzy, co tam máš, je potřeba rozbít na víc sloupců případně tabulek – abys tam měl atomické hodnoty.

Pokud by to z povahy dat resp. jejich struktury nešlo (většinou to jde), tak použij nějaký datový typ, který ti umožní uložit víc hodnot/strukturu do jednoho sloupce (XML, pole atd.), se kterým tvůj SŘBD umí pracovat a nabízí pro něj funkce/operátory.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.