| 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*')
DESCTak 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 30Pak 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: 14 let
|
|||
0