Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem pretrage sql polja sa tagovanim rečima

[es] :: MySQL :: Problem pretrage sql polja sa tagovanim rečima

[ Pregleda: 447 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 278
*.dynamic.isp.telekom.rs.

Sajt: www.paundurlic.com/vlaski..


+3 Profil

icon Problem pretrage sql polja sa tagovanim rečima29.05.2024. u 16:32 - pre 18 dana i 6h
Pokazalo se da je najpregledniji način označavanja akcenta u nekoj reči podvlačenjem (underline) naglašenog slova.
Tako, na prrimer, ako je u reči ”slabost” naglasak na ”a” onda će to slovo biti ”ograđeno” tagovima <u>a</u> pa će cela reč u bazi izgledati ovako: sl<u>a</u>bost a na ekranu ovako slabost.
Problem nastaje prilikom pretraživanje jer reč uneta u formatu ”slabost” uveliko odudara od ove tagovane reči.

Code:
$unetarec = "slabost";
$result=mysqli_query($link, "SELECT gnezdo_reci FROM recnik WHERE gnezdo_reci LIKE '%$unetarec%' collate utf8_bin;");

U navedenom slučaju mySQL će dati sve slogove u kojima se u polju "gnezdo_reci" nalazi neakcentovana reč "slabost", a svi ostali slučajevi ostaće skriveni.
Bilo bi idealno kada bismo mogli da polje "gnezdo_reci" očistimo od tagova: ...
Code:
WHERE strip_tags(gnezdo_reci) LIKE '%$unetarec%'
... ali, to ne biva ... barem meni nije uspelo!

Ja sam pribegao jediniom "sluhističkom" načinu koji mi je pao na pamet: napravio sam pored polja "gnezdo_reci" susedno polje "gnezdo_recidva" i tu kopirao sadržaj polja "gnezdo_reci" očišćenog od tagova, i na njega usmerio upit ...

Zanima me, međutim, da li postoji neko bolje rešenje za ovaj problem?

Pozdrav svima i unapred hvala.


[Ovu poruku je menjao pakito dana 29.05.2024. u 17:54 GMT+1]
 
Odgovor na temu

flighter_022
L2 Applications Administrator
NS

Član broj: 18499
Poruke: 743
95.180.68.*

ICQ: 23089150


+232 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima29.05.2024. u 17:23 - pre 18 dana i 5h
A zasto komplikovati? Zasto ne dodati 2 kolone:

u_start
u_end (u=underline)

I onda u PHP kodu napraviti da ako su oba nula (nema akcenta) rec se prikazuje normalno, a ako nisu nula prikazuje se deo pre u_start normalno, deo izmedju u_start i u_end podvuceno, a ostatak iza u_end opet normalno?

 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 278
*.dynamic.isp.telekom.rs.

Sajt: www.paundurlic.com/vlaski..


+3 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima29.05.2024. u 17:51 - pre 18 dana i 5h
Reč je o tekstu neodređene dužine a različitog stila, na primer:

un (sint.) — (kal.) Badnji dan, dan uoči Božića ◊ Aźun ĭe ḑîua înainća lu Kraśun — Badnji dan je dan u oči Božića ◊ sara la Aźun kopiĭi sa duk în koļindrĭeț — uveče na Badnji dan deca idu u koljindrece ♦ var. inov. un [Por.] ∞ aźuna

koji u polju mySQL baze izgleda ovako:

<b>Aź<u>u</u>n</b> (sint.) — (kal.) <i>Badnji dan, dan uoči Božića</i> ◊ Aź<u>u</u>n ĭe ḑ<u>î</u>ua îna<u>i</u>nća lu Kraś<u>u</u>n — <i>Badnji dan je dan u oči Božića</i> ◊ s<u>a</u>ra la Aź<u>u</u>n kop<u>i</u>ĭi sa duk în koļindrĭ<u>e</u>ț — <i>uveče na Badnji dan deca idu u koljindrece</i> ♦ var. inov. <b>Až<u>u</u>n</b> [Por.] ∞ <b>aźun<u>a</u></b>

i sad zamislimo da korisnik traži reč "Aźun” koja u bazi izgleda ovako: Aź<u>u</u>n!?

Za mySQL-ove naredne "SELECT" i "LIKE" to prosto nisu isti stringovi.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3472

Jabber: djoka_l


+1467 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima29.05.2024. u 19:22 - pre 18 dana i 3h
Koristiš regularne izraze, pogledaj "Regular Expressions" u uputstvu za MySQL

Primer:
Code (sql):

SELECT regexp_replace('nešto ispred pa reč sa akcentom <b>Aź<u>u</u>n</b> pa nešto iza', '<[/]?u>', '', 1, 0, 'i')
 

Rezultat:
Code:
nešto ispred pa reč sa akcentom <b>Aźun</b> pa nešto iza


Ovaj regexp_replace radi zamenu u prvom stringu pojavu regularnog izraza '<[/]?u>' praznim stringom, počevši od 1 slova do kraja stringa ne uzimajući u obzir mala/velika slova

Regularan izraz <[/]?u> znači
string koji počinje sa "<"
za kojim sledi neki od znakova unutar uglastih zagrada ( tu je samo kosa crta )
A taj znak se pojavljuje 0 puta ili jednom (onaj upitnik posle uglestih zagrada znači 0 ili 1)
za kojim sledi znak ">"

Hoćeš da skineš i bold, nikakav problem evo regularnog izraza
Code (sql):

SELECT regexp_replace('nešto ispred pa reč sa akcentom <b>Aź<u>u</u>n</b> pa nešto iza', '<[/]?[ub]>', '', 1, 0, 'i')
 

Rezultat:
Code:
nešto ispred pa reč sa akcentom Aźun pa nešto iza
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 278
*.dynamic.isp.telekom.rs.

Sajt: www.paundurlic.com/vlaski..


+3 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima29.05.2024. u 23:08 - pre 18 dana
Da li si siguran da REGEXP_REPLACE može da očisti polje u MySQL bazi?

U mojoj bazi "recnik" polje koje sadrži reči sa tagovima zove se "gnezdoreci".
Ako sam dobro razumeo, upit treba da izgleda nešto ovako

Code:
$result=mysqli_query($link,"SELECT gnezdoreci FROM recnik WHERE regexp_replace('gnezdoreci', '<[/]?u>', '', 1, 0, 'i') LIKE '%$unetarec%' collate utf8_bin;");

 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3472

Jabber: djoka_l


+1467 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 07:12 - pre 17 dana i 16h
Pretpostavljam da se polje u tabeli RECNIK zove GNEZDORECI.
Onda nije potrebno stavljati pod znake navoda, nego navesti polje.
Ja sam kao primer stavio string (zato je pod znacima navoda), ali isto tako moze da se stavi i polje u bazi.


$result=mysqli_query($link,"SELECT gnezdoreci FROM recnik WHERE regexp_replace(gnezdoreci, '<[/]?u>', '', 1, 0, 'i') LIKE '%$unetarec%' collate utf8_bin;");
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 278
*.dynamic.isp.telekom.rs.

Sajt: www.paundurlic.com/vlaski..


+3 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 08:04 - pre 17 dana i 15h
Probao, evo odgovora:

Code:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in ..... vlaski.recnik/pretraga.php on line 41


a linija 41 izgleda ovako:

Code:
if(mysqli_num_rows($result)>0)
   {


PS. Pored mnogih stvari koje ne znam, ne znam ni koja mi je verzija MySQL-a.
Da nije tu možda neka začkoljica?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3472

Jabber: djoka_l


+1467 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 08:19 - pre 17 dana i 14h
Vrlo moguće, MySql je do verzije 5.7 imao vrlo rudimentarnu podršku za regularne izraze, sa drugačijom sintaksom. https://dev.mysql.com/doc/refman/5.7/en/regexp.html
Ovo što sam ja napisao važi za verziju 8. https://dev.mysql.com/doc/refman/8.0/en/regexp.html

Ako nemaš odgovarajuću verziju baze, PHP je više nego dovoljan da obradi regularne izraze https://www.w3schools.com/php/php_regex.asp
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3472

Jabber: djoka_l


+1467 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 12:25 - pre 17 dana i 10h
Možeš lako da proveriš koja ti je verzija upitom

SELECT version();
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek * Pančevo

Član broj: 91953
Poruke: 278
*.dynamic.isp.telekom.rs.

Sajt: www.paundurlic.com/vlaski..


+3 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 12:53 - pre 17 dana i 10h
Nek se oprosti meni sluhisti što moram da pitam a gde se to pita?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3472

Jabber: djoka_l


+1467 Profil

icon Re: Problem pretrage sql polja sa tagovanim rečima30.05.2024. u 14:24 - pre 17 dana i 8h
Pa možeš iz PHP-a da pitaš, a ne znam da li koristiš neki klijentski pogram da pristupiš na MySQL.
Samo stavi taj upit odakle god pozivaš bazu i pogledaj šta ti vrati kao odgovor.
 
Odgovor na temu

[es] :: MySQL :: Problem pretrage sql polja sa tagovanim rečima

[ Pregleda: 447 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.