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

Pretraga baze po vise OR i AND upita (problem)

[es] :: MySQL :: Pretraga baze po vise OR i AND upita (problem)

Strane: 1 2

[ Pregleda: 6329 | Odgovora: 36 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 18:32 - pre 70 meseci
Ćao drugari, dugo me nije bilo, ali zapeo sam na jednom projektu.

Naime, imam bazu artikala, ali nemam kategorije, vec samo opširan naziv artikla (npr. Futrola x345 za Apple iPhone 7 teget).
E sad meni nastaje pakao oko pretrage, jer imam i paginaciju..

Način za preragu izvlačim iz url-a: mojsajt.com/proizvodi/futrole/1/apple-iphone-5c gde je $arg2 naziv kategorije npr. futrola, $arg3 broj za paginaciju, $arg4 model telefona

Prvo radim pretragu po fiktivnoj kategoriji (futrola, torbica, futrole), gde koristim upit ILI ILI - u ovom slucaju samo tri, jer nema č,ć itd u nazivu pa da moram obe varijante da testiram).

Code:


           $sql = array();
           $words = array('futrola','futrole','torbica');
       foreach($words as $word){
        $sql[] = '(lower(naziv) LIKE \'%'.$word.'%\')';
       }
           $limit = 48;
       if($arg3 == ""){
          $arg3 = 0;
       }
       $offset = $arg3*48;
       $sqlNumRows ='SELECT * FROM artikli WHERE '.implode(" OR ", $sql).' ORDER BY id DESC';
       $sql = 'SELECT * FROM artikli WHERE '.implode(" OR ", $sql).' ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset;
       $poslednjih10 = $oDb->get_results($sql);
       $brRezultata = $oDb->num_rows($sqlNumRows);



I to radi ok, izlista sve, ide paginacija itd.. odradim foreach petlju i prikazem sve proizvode koji imaju u nazivu futrola ili vec zadata rec.

Ali onda kada trazim po modelu telefona npr Apple iPhone 7 ja moram sad prethodnu pretragu da suzim na naziv u kome se nalazi i APPLE i IPHONE i 7

E sad ja tu drugu pretragu moram da ubacim u prethodnu foreach petlju i da ispitam svaki naziv da li u sebi sadrzi sve tri reci.

Code:

                                 if($arg4 != ""){
                    $words2 = explode("-",$arg4);
                    $zadnjaRec = end($words2);
                    $arrayArtikal = strtolower($artikalNaziv);
                    $arrayArtikli = explode(" ",$arrayArtikal);
                    foreach($arrayArtikli as $arrayArtik){
                        if($zadnjaRec === $arrayArtik){
                                                     //prikazi taj proizvod
                                                }
                                       } else //dalje sve ok radi.



Gornji primer je samo pretraga po sifri artikla (npr samo 5s), i to mi pravi problem, a ne po sva tri elementa.

Problem je u paginaciji, jer meni npr pretrazi prvih 48 unosa gde nema sve tri reci, tek na 6toj strani mi je artikal i on izvrti petlju ali ne prikaze nista.

Kako da napisem sql ili logiku za prikaz artikala po ova dva osnova.. Prvi je pretraga baze sa ili ili ili recima, a zatim filter tih rezultata sa I I I ..


Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 19:19 - pre 70 meseci
1. JOOOOOOOOOOOOOJ

2. koristi kolaciju u kojoj su ta slova ista (ako se dobro secam utf_general_ci slova sa kukama == slova bez kuka, proveri ... rekao bi ti da napravis svoju kolaciju i linkovao ti moj blog ali ne verujem da ono sto je sada tamo moze mnogo da ti pomogne)

3. NEMOJ da koristis ovakve upite dal si normalan ... LIKE je full table scan na keca ... to je pucanje ne u nogu nego na jedno mnogo ozbiljnije mesto ... koristi MATCH i full text search funkciju mysql-a ako vec nisi dizajnirao bazu sa nekim keyword indexom


 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 19:51 - pre 70 meseci
Ma bilo bi ful da sam dizajnirao bazu ja, al ovako dobio samo fajl sa 15000 artikala, naziv, cena, slika...

Nije problem toliko u kolaciji, jer fakticki pravim rucno pretragu.. npr imam kategoriju ostalo, gde moram da izvrtim i mis, tastatura, dzojstik, itd.. sve pod jednom oblasti..
To je uzas, ali ajde, nema puno pa ide rucno..

pogledacu match, mada ovo mi jedino iz ovog ugla sto je davalo neki rezultat.. LIKE koci bazu, ali kad pustim celu, sa limitom ide brzo..

Ako ima neko slicnu problematiku, nek da neku ideju, pa ko pre devojci..
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 20:01 - pre 70 meseci
zaboravi like, to ti je kao da citas tekstualni fajl pritom zabodes celu
bazu ...

full text search mozes da napravis nad postojecom bazom samo nad tim
poljem napravi full text search index i to je to (i naravno promeni
upite da rade full text search a ne like)
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 20:20 - pre 70 meseci
Sad vidim da imam minimum na fulltext search.. mora minimum 4 karaktera.. Onda iPhone 5s pada u vodu..
Takodje on mi daje rezultate koji su iPhone OR 5s, a ne iPhone AND 5s.

Fakticki bi mi vratilo sve rezultate gde se pominje bar jedna od zadatih reci a to mi nije cilj.

Cilj je upit: Izaberi iz tabele gde naziv (ima 'Futrola' ili 'Futrole') i (naziv ima 'apple' i naziv ima 'iphone' i naziv ima '5s').

U ovom slucaju trazio bi da naziv ima:( Futrola i Apple i iPhone i 5s) ILI (Futrole i Apple i Iphone i 5s)..

Ako to neko moze da mi prevede u mysql upit sa dva array gde je jedan OR a jedan AND ... pa, kirija bi sutra bila placena :D


Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 20:35 - pre 70 meseci
uradis full text search na ono sto je vece od 4 karaktera (inace to se
konfigurise
https://dev.mysql.com/doc/refman/8.0/en/fulltext-fine-tuning.html pa
moze da bude i 2 ) a onda radis like kroz taj rezultat pa radis like
kroz par stotina slogova a ne kroz milione ... mada ako je tvoj mysql a
ne neki hostovan

|https://dev.mysql.com/doc/refm...ysvar_innodb_ft_min_token_size
https://dev.mysql.com/doc/refm...es.html#sysvar_ft_min_word_len
innodb_ft_min_token_size=2 ft_min_word_len=2 i resen problem :D |
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 21:52 - pre 70 meseci
Problem se leči na izvoru.
Šta te sprečava da odradiš kategorizaciju podataka i zaboraviš na budženje?
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 22:06 - pre 70 meseci
Shared hosting, tako da rekonfigurisanje moze da prodje, a i ne mora, zavisno od suporta i hosting firme..

A za budzenje, tj kategorizaciju, problematika je u raznim varijantama naziva, nije uniformno, da kazem prva rec je uvek kategorija, druga marka, treca model, itd..
Primeri:

- Data kabl LDNIO LC84 za iPhone 5/iPhone 6/6S/micro USB crni 1m
- Citac kartica LDNIO SY-596 USB 2.0 crni
- Stalak+pojacivac za Iphone 4/4S/5 JAJE zuti
- Back up baterija REMAX Proda Yogurt PPP-6 10000mAh crvena
- Futrola Teracell Crystal za Huawei Honor 7 Lite/5C transparent
- Futrola Defender Military bi fold za iPhone 6 plus/6S plus crna
- Futrola univerzalna gumena za mobilni telefon 4.5-5.0" type 20
- Vodootporna suva torba Ocean Pack 2L crvena
- Vodootporna futrola DOT+ za iPhone 6/6S svetlo plava
- PVC zastita za Alcatel OT Pop 4/5051X anti-glare

Realno pakao...


Naravno rokovi su posebna prica, ali ajde, to nije toliko problem. Ne znam, smislicu vec nesto

Edit: sto je najgore, sad vidim da mi explode sa " " razmacima ne igra ulogu kod '4/4S/5'
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 22:20 - pre 70 meseci
Ma znam sta cu, stari dobri pesacki nacin, imam ipak odredjen broj linkova u meniju, ispitacu prvo celu bazu jel ima futrola i dodati kategoriju futrola, itd za ostalo..
Mora da se sredi baza.. posle je vec lakse..
Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 22:39 - pre 70 meseci
pitanje sta je to u stvari, ako ti mora ides search kroz opis artikla tu
ti klasifikacija ne pomaze jer opet mora prolazis search kroz sve i opet
nekop moze da upise sta oce u to polje ... shared hosting .. hm .. tesko
da ce menjati (spustanje ft-a na 2 slova ume da poveca indexe po 5-6
puta zavisi sta hostuju) .. imas budzevinu da pravis sam svoj index (na
insert podelis na reci, ubacis reci u tabelu, imas tabelu sa id_rec *
id_itema u kom ga ima ... to je prilicno brzo i radi lepo na mnogo
velikih sajtova koji su zahtevali transakcije i search u vreme kada
innodb nije imao full text search a nisu hteli da koriste sphynx) ..
 
Odgovor na temu

svepomalo

Član broj: 306404
Poruke: 196



+21 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 22:47 - pre 70 meseci
Citat:
bogdan.kecman: .. imas budzevinu da pravis sam svoj index (na
insert podelis na reci, ubacis reci u tabelu, imas tabelu sa id_rec *
id_itema u kom ga ima ..


Bogdane, ako sam dobro razumeo npr. ovakav opis:

"Kompatibilnost sa HDR-om (velikim dinamičkim opsegom): Da
Poboljšavanje jasnoće: 4K X-Reality PRO
Poboljšavanje boja: Tehnologija Live Colour
Poboljšavanje kontrasta: Dynamic Contrast Enhancer
Režimi slike: Živopisno, Standardno, Prilagođeno, Bioskop, Sport, Fotografija – živopisno, Fotografija – standardno, Fotografija – prilagođeno, Igra, Grafika, HDR živopisno, HDR video
Podrška za HEVC: Da (do 3840x2160/60p, 10-bitno)"


podelis na reci? Dakle "Kompatibilnost", "HDR-om", "Standardno" etc... i spucas u drugu tabelu? Onda ide search nad poljem rec sa like? Ali koji like i ako je like, nesto tipa: "$rec%" ili "%$rec%? U prvom vredi index u drugom ne?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 22:56 - pre 70 meseci
article_id, article_desc

1, lele me mudija na kub

2, ptice umiru pevajuci

3, killing me softly

4, umiru vozovi


rec_id, rec_value

1, lele

2, me

3, mudija

4, na

5, kub

6, ptice

7, umiru

8, pevajuci

9, killing

10, softly

11, vozovi

rec_id, article_id

1,1

2,1

2,3

3,1

4,1

5,1

6,2

7,2

7,4

...

...


select * from article where article id in (select article_id from
rec_article where rec_id in (select rec_id from rec where rec_value in
('iphone', '7s', 'nokia', 'kabl')));


(upit je cisto da ti bude jasno sta radis, trebalo bi da se napise malo
lepse)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:01 - pre 70 meseci
pri tome to ne kazem da je najbolje resenje, samo dajem primer kako se
to nekad radilo (mislim da brdo foruma ima na primer ima da biras oces
takav index za postove ili full text search, phpbb na primer) full text
search, sphynx, bolja organizacija baze, redizajn aplikacije etc etc..
sve to realno daje bolje rezultate ali i ovo moze da se iskoristi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:03 - pre 70 meseci
Citat:

Ali koji like i ako je like, nesto tipa: "$rec%" ili "%$rec%? U prvom vredi index u drugom ne?


ako oces ikakve performanse nemoj da radis like nad vise od 100 rekorda

nikakav like

generalno "xxx%" ima "sansu" da koristi index (uglavnom nece) dok "%xxx" nema ni sansu
 
Odgovor na temu

svepomalo

Član broj: 306404
Poruke: 196



+21 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:06 - pre 70 meseci
Da jasno :)

Samo zasto 3 tabele?
Sta fali da budu 2?
prva:
article_id, desc
druga:
article_id, rec
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:24 - pre 70 meseci
zato sto mora da imas tabelu sa unique recima da bi cela stvar imala
smisla vezano za performanse inace se vracas na isto
 
Odgovor na temu

Aleksandar Klickovic
Owner
Daedalus Outsourcing
Beograd

Član broj: 204183
Poruke: 344
*.dynamic.sbb.rs.

Sajt: petsq.me


+67 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:24 - pre 70 meseci
Ja evo nafilovah kategorije, a i podtkategorije pesacki za 20 min, mozda ima par neklasifikovanih, ali opet cu sebi samar da lupim zbog overthinkinga, 2 dana kopam po netu da odradim ovo, a samo zato sto se pravim pametan, hocu jedan qwery za AI ..

Code:


UPDATE artikli SET kategorija = 'Futrola' WHERE lower(naziv) LIKE '%futrola%';

UPDATE artikli SET podkategorija = 'Samsung' WHERE lower(naziv) LIKE '%samsung%';




Daedalus Outsourcing | Web Development | SEO | Instagram Followers - http://daedalus.co.rs
 
Odgovor na temu

Deunan

Član broj: 338178
Poruke: 83
*.dynamic.isp.telekom.rs.



+21 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)19.06.2018. u 23:38 - pre 70 meseci
1. Ne moras da koristis isti query 2 puta da bi izvadio broj nadjenih redova. Koristi SQL_CALC_FOUND_ROWS:
Code:

SELECT SQL_CALC_FOUND_ROWS id, name FROM artikli WHERE something='123' ORDER BY id DESC

Posle toga samo izvadis ukupan broj redova sa:
SELECT FOUND_ROWS();


2. Mozes da kreiras u bazi tabele "kategorije" i "artikal_kategorija". I krenes redom da popunjavas, recimo:
Code:

$artikli = SELECT * FROM  artikli WHERE name LIKE '%fotrole%' OR name LIKE '%fotrola%'
INSERT INTO kategorije (name) VALUES ('fotrola')
$kategorija = SELECT * FROM kategorije WHERE name='fotrola'

foreach($artikli as $artikal)   {
  INSERT INTO artikal_kategorija (artikal_id, kategorija_id) VALUES ($artikal['id'], kategorija['id'])
}

i to odradis za sve kategorije, ne treba ti vise od sat vremena.

3. Autocomplete search radi Ajax-om i kreiras drop down listu sa artiklima tako da moze da vidi sta mu izbacuje i da koriguje. Kada korisnik unese slovo, posaljes request i pretrazis bazu:
Code:

$search = explode(" ", $_GET['search']);
SELECT * FROM artikli WHERE name LIKE '%$search[0]%' AND name LIKE '%$search[1]%'... ORDER BY name LIMIT 20

Ne brini, radio sam ja slican search na dosta sajtova (jos ima provajdera kod nas sto im baza ne podrzava FULL TEXT SEARCH). Na 100 000 proizvoda delay je par milisekundi, jedva se to primeti. To ako napunis par miliona proizvoda, pa mozda bude duzi odziv, al sumnjam da je preko jedne sekunde.


P.S. nisam dugo kucao "cist" sql, obrati paznju na sigurnost, valjda ces shvatiti sta sam hteo da kazem.




[Ovu poruku je menjao Deunan dana 20.06.2018. u 01:32 GMT+1]
 
Odgovor na temu

nkrgovic
Nikola Krgović
Beograd

Član broj: 3534
Poruke: 2807

ICQ: 49345867
Sajt: https://www.twinstarsyste..


+655 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)20.06.2018. u 07:01 - pre 70 meseci
Citat:
bogdan.kecman:
pri tome to ne kazem da je najbolje resenje, samo dajem primer kako se
to nekad radilo (mislim da brdo foruma ima na primer ima da biras oces
takav index za postove ili full text search, phpbb na primer) full text
search, sphynx, bolja organizacija baze, redizajn aplikacije etc etc..
sve to realno daje bolje rezultate ali i ovo moze da se iskoristi

This.

Nemas ti nikakvu relacionu datu ovde, ma koliko se Bogdan junacki trudio da ti pomogne da napravis od babe devojku ;). Strpaj u bazu ono sto je relaciono, potrpaj te opise u jedno text polje i ne radi search uopste nad bazom. Lepo ti je covek objasnio da LIKE nad bazom nije nikakvo resenje, a menjao kod da koristis Full text nad bazom, ili nad externim full text sistemom.... nije neka razlika. Full text nad bazom je super stvar kad moras to da sa jos necim join-ujes (recimo na nekom OLAP dedicated slave-u pa te ne bole performanse, a bas bas moras tako da radis), ali ti imas samo text.

Upucas sve i sphinx ili elasticsearch, u parovima ID, text (ID kao primarni kljuc iz baze),pa lepo pitas njih za like, a onda odes u bazu samo po primarnom kljucu. Potrazi malo tutorials kako se to radi, malo ti je vise posla sa ops strane, ali si mnogo mirniji.

I da, ako ces da razvijas taj sistem dalje, probaj kako god znas da to prebacis ne neki EAV model, to je napravljeno za to - i radi na bazi za razliku od ovoga sto ti imas. ;)
Please do not feed the Trolls!

Blasphemy? How can I blaspheme? I'm a god!'
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.tippnet.co.rs.



+218 Profil

icon Re: Pretraga baze po vise OR i AND upita (problem)20.06.2018. u 07:41 - pre 70 meseci
Kazes da nemas kategorije u bazi a onda pravis url sa kategorijom. To mi bas nije jasno.
Koliko imas artikala?
Koliko je posecen sajt?
Ako je 10.000 artikala i 10.000 poseta dnevno onda ni jedan server nece osetiti LIKE.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: Pretraga baze po vise OR i AND upita (problem)

Strane: 1 2

[ Pregleda: 6329 | Odgovora: 36 ] > FB > Twit

Postavi temu Odgovori

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