Portál AbcLinuxu, 7. května 2025 17:11

Dotaz: prikaz NOT REGEXP v mysql

29.4.2013 14:58 bajt | skóre: 1
prikaz NOT REGEXP v mysql
Přečteno: 234×
Odpovědět | Admin
Když následující dotaz (a) spustím přímo v mysql databázi, tak funguje spravne, ovsem pokud jej zakonponuju do skriptu (b) tak radky ktere obsahuji dane slova v popisu neodfiltruje, nevite proc??

(a) SELECT popis FROM....WHERE popis NOT REGEXP 'UKONČENA|VYŘAZENO|NEDODÁVÁ|STAŽENO Z|NENÍ V NABÍDCE|NENÍ K DISPOZICI'

(b) $vysledek = MySQL_Query("SELECT popis FROM....WHERE popis NOT REGEXP 'UKONČENA|VYŘAZENO|NEDODÁVÁ|STAŽENO Z|NENÍ V NABÍDCE|NENÍ K DISPOZICI'");

Řešení dotazu:


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

Odpovědi

29.4.2013 15:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zmatek v kódování(?), zkusil bych naslepo něco bez diakritiky…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
29.4.2013 16:15 bajt | skóre: 1
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
timto neni - zkousel jsem treba odfiltrovat jen polozky co obsahuji slovo "otvor" a nezafungovalo to :-(
rADOn avatar 29.4.2013 16:34 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dotazy do databáze posíláš v nějakém kódování (specifikuješ při vytváření spojení) a toho se musíš držet a ne posílat to co zrovna ten den bleje tvůj Oblíbený Editor (tm). Čili v první řádě nemůžeš psát do kódu dotazy jako řetězcový literály. Potřebuješ to mít zaescapovaný, napriklad kdyby to bylo utf8 takhle:
"SELECT popis FROM....WHERE popis NOT REGEXP 'UKON\xc4\x8cENA|VY\xc5\x98AZENO|NEDOD\xc3\x81V\xc3\x81|STA\xc5\xbdENO Z|NEN\xc3\x8d V NAB\xc3\x8dDCE|NEN\xc3\x8d K DISPOZICI'"
Ideální je samozřejmě mít to ve stejným kódování jako db, ale není to podmínka – konverze není těžká pokud víš kodování zdroje.

BTW celý je to padlý, používat češtinu v číselníkových sloupcích je složitější a pokud nehovíš práci s collation a kódováním sloupců tak bys to neměl dělat. A zahoď ten regex a použij místo toho NOT IN klauzuli, tím se nepřipravíš o indexy.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
29.4.2013 16:57 bajt | skóre: 1
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
Diky rADOne ! jj kodovani pri spojeni je utf8 Kdybych tomu rozumel tak dobre jako ty, tak bych se tak blbe neptal :-) Jinak diky s timto to funguje dobre!

NOT IN myslis pouzit ve stylu "SELECT id, popis ....WHERE popis NOT IN '....'" ?

Sloupec popis neni ciselnik ale je v nem ulozeno nekdy az 1000 znaku popisu zbozi a ja chci pri exportu vyloucit ty, ktere v nem maji uvedeno aspon jedno z techto slov.....Nebo to chapu opet spatne (programovanim se vylozene nezivim)?
rADOn avatar 29.4.2013 18:26 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
Kdyby to byl čísleník, můžeš to napsat takhle:
…WHERE popis NOT IN ('foo','bar','baz')
Uvnitř IN může být i subselect který ti třeba překlopí lidské názvy na něco rozumnějšího.
…WHERE popis NOT IN ( SELECT id FROM foo WHERE … )
Přitom to může fungovat rychle i nad velkými daty když tam hodíš index. A když nadefinuješ cizí klíč tak máš i zajištěnou referenční integritu.

LIKE a REGEX použití indexu víceméně vylučují, takže každý dotaz pojede fullscan přes celou tabuli. Někdy se tomu nedá vyhnout, ale podle názvů v tom tvém dotazu soudím že by tam čísleník patřil.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
rADOn avatar 29.4.2013 18:43 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
BTW praktická zkušenost která by se ti jak to tak čtu mohla hodit: když budeš něco ladit tak všechno dovnitř i ven escapuj (var_export nebo print_r nebo tak něco). Jinak se ti snadno stane že se ti něco špatně překóduje když to ukládáš, ale při čtení se to obrátí takže to nevidíš a pak se divíš proč to nejde někomu "záhadně" nejde (protože má jiný kódování v terminálu nebo prohlížeči, což obvykle zjistíš až pozdě).
"2^24 comments ought to be enough for anyone" -- CmdrTaco
29.4.2013 16:48 Sten
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Někde (asi v tom skriptu po připojení k databázi) tam asi chybí SQL dotaz SET NAMES kódování
29.4.2013 16:58 bajt | skóre: 1
Rozbalit Rozbalit vše Re: prikaz NOT REGEXP v mysql
je tam presne toto: MySQL_Query("SET NAMES 'utf8'");

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.