DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   LIKE, vise zapisa (http://www.devprotalk.com/showthread.php?t=5125)

Ivan 14. 04. 2008. 21:50

LIKE, vise zapisa
 
Prvo da napomenem da nisam znao kako jasnije da napisem naslov, pa ako neko ima ideju neka zameni, hvala ...

Imam sledeci problem: Postoji tablica sa X zapisa, struktura otprilike izgleda ovako:

|id|title|text|code_name|
-------------------------
1|title1|neki_text1|XDJENOEP|
2|title2|neki_text2|DJE13NJD|
3|title3|neki_text3|PLKAZYW|

I sad, imam drugu tablicu gde se cuvaju delovi polja code_name, npr: E13, ZYW. Te, da kazemo delove polja code_name, vadim jednim kverijem.

Nakon toga mi je potrebno da iz prve tablice izvucem odredjen broj zapisa (neka bude 1) ali tako da code_name bude "LIKE" onaj deo koji sam izvukao iz druge tablice.
Za sada izgleda jednostavno, za svaki deo code_name koji sam izvukao napisem kveri tipa: "SELECT * FROM table1 WHERE code_name LIKE '%E13%' LIMIT 1". Ovo pustim u petlju za svaki zapis i to je to.

Ali problem je cu imati mnogo zapisa i to ce da oduzme previse vremena, zanima me da li postoji nekin nacin da se stavi vise LIKE uslova i da se za svaki izvuce po jedan zapis ... ?

Nadam se da ste razumeli ? I da neko ima ideju kako ovo da resim ... ?

Hvala,
Ivan

kalkulus 14. 04. 2008. 22:06

mozesh ti da stavish vishe uslova u upit

SELECT * FROM table1 WHERE code_name LIKE '%E13%' OR code_name LIKE '%ZYW%' OR code_name LIKE..

Ivan 14. 04. 2008. 22:33

Da, ali to ne znaci da cu da dobijem sigurno jedan zapis koji sadrzi "E13" i jedan zapis koji sadrzi "ZYW". Vec mogu da dobijem dva sa istim delom code_name, zavisno vec od redosleda zapisa u bazi i ostalih uslova.

Nadam se da je sada jasnije sta mi je potrebno ...

LiquidBrain 14. 04. 2008. 22:39

distinct?

Dejan Topalovic 14. 04. 2008. 23:03

Hm, nisam siguran da sam ispravno shvatio sta zelis, ali mozda ti ovo moze pomoci?
Kôd:

select cn.*
from code_names as cn, code_pieces as cp
where instr(cn.code_name, cp.code_piece) > 0
and cp.code_piece = 'E13';


jablan 15. 04. 2008. 00:13

A nešto na foru:
Kôd:

SELECT * FROM delovi d
LEFT JOIN puni p ON p.polje LIKE '%' + d.polje + '%'

?

Ivan 15. 04. 2008. 16:49

Hm nijedno resenje mi ne pomaze, ajd da probam da objasnim ponovo:

Tablica 1:

|id|title|text|code_name|
-------------------------
1|title1|neki_text1|XDJENOEP|
2|title2|neki_text2|DJEN3NJD|
3|title3|neki_text3|PLKAZYW|

Tablica2:

|id|code_pieces1|code_pieces2|
-------------------------
1|XDJ|JEN|
2|JE1|ZYW|

Ono sto prvo uradim je da selektujem iz tablice 2 ove delove koda i pustim to u petlju. Dakle za prvi krug imacemo "XDJ" i "JEN".

Sada mi treba kveri koji ce da izvuce, iz tablice 1, jedan zapis koji u polju code_name ima deo LIKE "XDJ" i jedan zapis koji ima deo LIKE "JEN". Ovo moze lako da se izvede sa dva kverija ali je pitanje kako sa jednim ...

Dakle nesto ovako:
"SELECT * FROM tablica1 WHERE code_name LIKE 'XDJ' OR code_name LIKE 'JEN' LIMIT 2"

I da ovaj kveri vrati:

|id|title|text|code_name|
-------------------------
1|title1|neki_text1|XDJENOEP|
2|title2|neki_text2|DJEN3NJD|

Ovo ce u nekim slucajevima i da vrati ovakav rezultat ali nece uvek, tj nece kada bude bilo vise "slicnih" zapisa. Tada ce da vrati npr dva zapisa LIKE 'XDJ', a distinct ne mogu da radim jer je polje "slicno" a ne isto ...

Jasnije sada ? :)

Hvala ...

kodi 15. 04. 2008. 23:52

Citat:

Originalno napisao Ivan (Napišite 53771)

Jasnije sada ? :)

Hvala ...



edit, sad mislim da razumem, neces da ti dva puta vrati isti row?

misk0 15. 04. 2008. 23:59

A nesto kao

Kôd:

SELECT t1.code_pieces1, t1.code_pieces2, t2.code_name FROM tablica2 as t1
JOIN tablica1 as t2 ON t2.code_name LIKE t1.code_pieces1 OR t2.code_name LIKE t1.code_pieces2

(ovo je iz glave, moguce da ima kakvih syntax gresaka.

jablan 16. 04. 2008. 00:12

U prvoj poruci nisi pomenuo da imaš dve kolone sa delovima koda. Je l' to konačno dve kolone ili n kolona? Zašto ti to nije normalizovano? Koji problem ustvari rešavaš?

Ivan 16. 04. 2008. 01:23

:)

@kodi, ne nego necu da mi dva puta vrati row koji zadovoljava samo prvi LIKE, vec hocu jedan row iz prvog uslova a drugi iz drugog

@misk0, hvala na trudu al mislim da to ne resava problem ... zbog OR

@jablan, postoji n kolona i problem je sledeci:

Postoji baza sa n zapisa o nekim artiklima, svaki artikal ima svoj izvor (nesto tipa url) i kategoriju. Postoji druga tablica, kategorije, gde su detalji te kategorije i prioriteti izvora za tu kategoriju. Pod prioritetima se podrazumevaju polja gde administrator moze da zada koji izvori imaju prioritet nad ostalim izvorima, i taj broj je neogranicen (isto kao i broj izvora).

Postoji deo sistema gde admin moze da izabere koje kategorije hoce da pregleda, i koliko zapisa u svakoj kategorije moze da ima (neka bude konacan broj) prilikom tog pregleda. Na pocetku zapisa, neke kategorije, prvo treba da se pojave zapisi koji imaju prioritet, pa tek onda ostali.

Trenutno resenje je takvo, da se izabrane kategorije stave u petlju, u kojoj se za svaku kategoriju izvuku prioriteti, pa se onda za svaki prioritet izvuce (posebnim kevrijem) odredjen zapis iz tablice sa artiklima. Sto znaci da ima ukupno broj_izabranih_kategorija + broj_izabranih_kategorija * broj_prioriteta kverija, a to je mnogo i prilicno se sporo izvrsava.

Moj zadatak je da nekako smanjim broj upita ...

Jel moze sada neka ideja :) Tnx

Btw, srecan rodjendan ;)

Dejan Topalovic 16. 04. 2008. 10:14

Moze ideja - dropni sve tabele i kreiraj ih kako treba. :D

Pokusavao sam da shvatim sta ti zapravo treba i nakon privh par poruka sam mislio da sam shvatio, ali sam se prevario - uspio si me jos vise zbuniti. :D

Ovako prema ovome sta si naveo, ne vrijedi ni pokusavati pisati neki upit, jer smatram da struktura tabela nije najbolje definisana...

Ako su podaci iz tabele 2 povezani sa nekim podatkom iz tabele 1, zasto ih nisi povezao preko neke lookup tabele ili barem dodatne kolone tabela1_id u smislu reference tabela2.tabela1_id = tabela1.id ...

Ivan 16. 04. 2008. 10:34

Uh ne mogu da dropujem, mogu samo da malo nabudzim :D

Citat:

Ako su podaci iz tabele 2 povezani sa nekim podatkom iz tabele 1, zasto ih nisi povezao preko neke lookup tabele ili barem dodatne kolone tabela1_id u smislu reference tabela2.tabela1_id = tabela1.id ...
Tabela sa artiklima ima u sebi polje koje oznacava iz koje je kategorije. Al ne znam koliko mi to znaci ovde ?

Tablica 1:

|id|cat|title|text|code_name|
-------------------------
1|1|title1|neki_text1|XDJENOEP|
2|1|title2|neki_text2|DJEN3NJD|
3|2|title3|neki_text3|PLKAZYW|
...

Tablica2:

|id|cat|code_pieces1|code_pieces2|
-------------------------
1|1|XDJ|JEN|
2|2|JE1|ZYW|
...

Jeste da je malo komplikovano, ne znam dal uopste ima resenje za ovo sto mi treba (ako uopste znam sta mi vise treba :)), svaka ideja je dobro dosla ...

jablan 16. 04. 2008. 10:37

Slažem se sa Dejanom (iako još uvek ne kontam potpuno).

Dakle, ovako mi trenutno izgleda tvoja situacija, sa propisno izmodeliranom bazom:

Kôd:

Artikli (id, izvor, idkategorije)
Kategorije (id, brojistaknutih)
Prioriteti (id, idkategorije, izvor)

BTW, hvala! ;)

Ivan 16. 04. 2008. 12:21

Hm ... probacu da prepravim sistem da radi sa takvom bazom. Kada zapnem sa upitom javljam se :)


Vreme je GMT +2. Trenutno vreme je 08:36.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.