Autor | Zpráva | ||
---|---|---|---|
Enko Profil * |
#1 · Zasláno: 26. 6. 2012, 17:59:56 · Upravil/a: Enko
Ahoj,
nějak se mi nedaří zprovoznit fulltextové vyhledávání z více tabulek. Každá tabulka má sloupec o názvu "polozka" a "popis". Zde je můj dotaz: CT * FROM smallwares, warehouse, eshop WHERE MATCH ( polozka, popis ) AGAINST ( 'test*' IN BOOLEAN MODE ) ORDER BY 5 * MATCH ( polozka ) AGAINST ( 'test*' ) +1 * MATCH ( popis ) AGAINST ( 'test*' ) DESC LIMIT 0 , 30 Nevíte někdo proč? v prvním řádku má být "SELECT *" |
||
Kajman Profil |
#2 · Zasláno: 26. 6. 2012, 18:13:36
Vyhledávejte ve třech tabulkách zvášť. Výsledky spojte přes union.
|
||
Enko Profil * |
#3 · Zasláno: 26. 6. 2012, 18:35:44
Děkuji za nasměrování. Nicméně, když to udělám takto:
SELECT polozka, popis FROM smallwares WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) UNION SELECT polozka, popis FROM eshop WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) UNION SELECT polozka, popis FROM warehouse WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY 5 * MATCH(polozka) AGAINST ('$search*') + 1 * MATCH(popis) AGAINST ('$search*') DESC Tak mi to hlásí: #1191 - Can't find FULLTEXT index matching the column list Ale přitom fulltext indexy na těch sloupcích jsem dělal |
||
Kajman Profil |
#4 · Zasláno: 26. 6. 2012, 19:24:00
Po unionu už nebudou ty indexy použitelné, zkuste to uzávorkovat...
( SELECT polozka, popis, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM smallwares WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) UNION ALL ( SELECT polozka, popis, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM eshop WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) UNION ALL ( SELECT polozka, popis, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM warehouse WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) ORDER BY myrank DESC LIMIT 30 Pak by to mohlo fungovat, pokud budou na všech třech tabulkách samostatné fulltextové indexy na obou sloupcích. |
||
Enko Profil * |
#5 · Zasláno: 26. 6. 2012, 19:41:08
Luxus, funguje mi to přesně jak jsem chtěl. Děkuju za pomoc. Velmi si vážím Vaší pomoci.
|
||
Časová prodleva: 4 dny
|
|||
Enko Profil * |
#6 · Zasláno: 30. 6. 2012, 16:22:08
Tak ještě prosím o jednu radu. Když chci do vyhledávaného výsledku v tomto zahrnout ještě několik dalších sloupců nebo všechny, například tipu "int", atd... Jak upravit tento dotaz aby byl funkční?
( SELECT *, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM smallwares WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) UNION ALL ( SELECT *, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM eshop WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) UNION ALL ( SELECT *, (5*MATCH(polozka) AGAINST ('$search') + MATCH(popis) AGAINST ('$search')) myrank FROM warehouse WHERE MATCH(polozka, popis) AGAINST ('$search*' IN BOOLEAN MODE) ORDER BY myrank DESC LIMIT 30 ) ORDER BY myrank DESC LIMIT 30 #1222 - The used SELECT statements have a different number of columns Zkoušel jsem několik dalších variant, ale nedaří se mi upravit tento dotaz, fungoval správně. Můžu Vás ještě jednou poprosit o pomoc? |
||
Alphard Profil |
#7 · Zasláno: 30. 6. 2012, 16:27:54
Vždyť je ta hláška jasná, máte různý počet sloupců. Vyjmenujte je a případně doplňte defaultními hodnotami.
|
||
Enko Profil * |
#8 · Zasláno: 30. 6. 2012, 16:41:55
Jojo, už to mám. Jen jsem se předtím překlepl a proto to nejelo. Díky :)
|
||
Časová prodleva: 12 let
|
0