Autor | Zpráva | ||
---|---|---|---|
capricorn Profil |
#1 · Zasláno: 1. 3. 2010, 14:05:54
Zdravím,
řeším následující problém. Mám dvě tabulky, tabulka1 a tabulka2. Tabulka1 má jen sloupeček name a je na něm nastaven fulltext index. Např. name Anna Nováková Anička Nováčková Tabulka2 má sloupečky id, name, name_ag (parametry pro AGAINST). Např. id | name| name_ag 1 | Anna| +anna A teď potřebuji procházet tabulku1 a vypisovat id z tabulky2 a z tabulky1 name za podmínky, že řádek z tabulka1 odpovídá parametru z tabulky2. A aby to nebylo málo, tak potřebuji statistiku, kolik řádku z tabulky1 nebylo a nebylo nalezeno v tabulce2. Řešil bych to pomocí cyklu, ale zajímá mně, jestli neexistuje nějaké elegantní a hlavně rychlé řešení pomocí databáze. |
||
Kajman_ Profil * |
#2 · Zasláno: 3. 3. 2010, 14:07:32
Možná hledáte něco takového...
select t2.id, t1.name from tabulka1 t1, tabulka2 t2 where match (t1.name) against (t2.name_ag /*in boolean mode*/) select (select count(distinct t1.name) from tabulka1 t1, tabulka2 t2 where match (t1.name) against (t2.name_ag /*in boolean mode*/)) nalezeno, (select count(*) from tabulka1) vsech from dual |
||
capricorn Profil |
#3 · Zasláno: 3. 3. 2010, 18:42:00
Kajman:
Děkuji, tohle jsem právě hledal. Vyskytl se problém. against (t2.name_ag IN BOOLEAN MODE) vrátí Incorrect arguments to AGAINST against ('t2.name_ag' IN BOOLEAN MODE) hledá slovo t2.name_ag against('+anna' IN BOOLEAN MODE) vrátí řádky Nevíte prosím v čem by mohl být problém? |
||
Kajman_ Profil * |
Problém bude v tom, že není povolené tam hodit přímo sloupeček...
AGAINST takes a string to search for, and an optional modifier that indicates what type of search to perform. The search string must be a literal string, not a variable or a column name. Asi bude potřeba opravdu nějaký whilecyklus a buď to zpracovávat postupně, nebo sestavit něco jako select 1 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+anna' in boolean mode) union all select 2 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+vana' in boolean mode) union all select 3 as zdrojid, t1.name from tabulka1 t1 where match (t1.name) against ('+naha' in boolean mode) |
||
capricorn Profil |
#5 · Zasláno: 6. 3. 2010, 18:27:54
Kajman:
Tomu cyklu se právě vyhýbám, každopádně děkuji. |
||
Časová prodleva: 14 let
|
0