Autor Zpráva
jares16
Profil
Ahoj, narazil jsem na problém se kterým bych potřeboval poradit.
mám dvě tabulky
clanky('id','autor')
preklady('clanky_id','jazyk','title','obsah')

a chtěl bych udělat fulltextové vyhledávání kreré by prohledávalo všechny jazykové mutace článku.

bez operátorů zpřesňujících vyhledávání mám takovýto dotaz

SELECT * FROM `clanky` 
JOIN `preklady` ON `clanky`.`id` = `preklady`.`clanky_id`
WHERE MATCH (`preklady`.`title`,`preklady`.`obsah`) AGAINST ('$_GET['hledat']')

ale takto pokud je hledaný řetězec obsažen ve více jazykových mutacích jednoho článku, tak je vrácen článek několikrát.
potřeboval bych nějak zajistit aby se vracel článek pouze 1x a vždy s jazykem který je prioritní (př. na stránce je nastaven jazyk "cz" a článek je v "cz","en","de", a ve všech je obsaženo klíčové slovo vyhledávání, tak se vrátí článek "cz" něco jako GROUP BY `clanky`.`id` a každou skupinu ORDER BY FIELD ('cz','en','de') nebo něco podobného.

Děkuji za jakoukoli radu!

Moderátor Kajman: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Kajman
Profil
Můžete si to filtrovat až v aplikaci? Tedy si vybrat si z databáze všechny seřazené tak, že stejné budou u sebe a nahoře bude chtěný jazyk. Pak v např. v php ignorovat ty, které už byly vypsány dříve.

Edit: možná by šlo i něco ošklivého jako

SELECT *
FROM   (
         SELECT `clanky_id`,
                SUBSTRING_INDEX(GROUP_CONCAT(`jazyk` ORDER BY FIELD (`jazyk`,'de','en','cz') DESC SEPARATOR ','),',',1) jazyk
         FROM   `preklady`
         WHERE  MATCH (`preklady`.`title`,`preklady`.`obsah`) AGAINST ('$_GET['hledat']')
         GROUP  BY `clanky_id`
       ) tmp
JOIN   `preklady`
         ON `preklady`.`clanky_id` = tmp.`clanky_id`
         AND `preklady`.`jazyk` = tmp.`jazyk`
JOIN   `clanky`
         ON `clanky`.`id` = tmp.`clanky_id`
jares16
Profil
možnost filtrace v php tu je, ale záleží mi především na rychlosti. Položek se může časem v db objevit i přes 5000 - 10000 takže musím vyzkoušet co nejvíce možností a testovat.
Ještě jsem přemýšlel o možnosti do článků přidat článek v AJ a joinovat k tomu překlad (pokud je k dispozici) v jazyce který je zvolen na stránce.
Protože předpokládám že kdo bude vyhledávání využívat tak bude chtít výsledky buď v rodném jazyce nebo v AJ.
Díky za tip! Vyzkouším jak to bude náročné na výpočetní výkon.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0