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 |
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.. |
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 ... |
distinct?
|
Hm, nisam siguran da sam ispravno shvatio sta zelis, ali mozda ti ovo moze pomoci?
Kôd:
select cn.* |
A nešto na foru:
Kôd:
SELECT * FROM delovi d |
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 ... |
Citat:
edit, sad mislim da razumem, neces da ti dva puta vrati isti row? |
A nesto kao
Kôd:
SELECT t1.code_pieces1, t1.code_pieces2, t2.code_name FROM tablica2 as t1 |
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š?
|
:)
@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 ;) |
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 ... |
Uh ne mogu da dropujem, mogu samo da malo nabudzim :D
Citat:
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 ... |
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) |
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.