この質問は、同じように機能するインデックス作成またはUNIONの代替案に関するものです。
さらなる例では、私たちは仮定title
text
し、content
fulltext
index
3つのステートメントがあると想像してください
SELECT title as text FROM news ORDER BY score DESC
SELECT name as text FROM pages ORDER BY score DESC
SELECT content as text FROM comments ORDER BY score DESC
それらを組み合わせることができます(手動で注文することに注意してください)
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
これでtext
印刷できるようになりましたが、注文は1)ニュース2)ページ3)コメントになります
おそらくスコアによって異なる順序で並べてほしいので、それは非常に悪いです
THREE SELECTS
したがって、これらすべてを組み合わせてONE SELECT
注文することができます
SELECT text FROM (
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
) as combination
今、私たちはORDER
それをすることができますscore
繰り返しますが、スコアは選択全体ではなくテーブルごとに基づいているため、これは非常に悪いことです。
それで、先に進み、私の質問が近づきます。
次のステップは紹介することMATCH() and AGAINST()
であり、私たちは書く
SELECT text, MATCH(text) AGAINST ('anything') as total_score FROM (
SELECT title as text FROM news ORDER BY score DESC
UNION
SELECT name as text FROM pages ORDER BY score DESC
UNION
SELECT content as text FROM comments ORDER BY score DESC
) as combination ORDER BY total_score DESC
完了です!MATCH(text
)が全文として索引付けされていないように見えない場合は、すべてが完全に機能するはずです。
エラーが表示されます:列リストに一致するFULLTEXTインデックスが見つかりません
今、consufionが来て、おそらく何も残っていませんが、どういうわけかを作成text
しFULLTEXT
ます。残念ながら、text
データベースに存在するような列はありません。たとえば、phpmyadminでそのようにするための列を見つけることができないとしましょうFULLTEXT
。
さらに伸ばして、どこにも見つからないようなものname as text
に近づけることを考えました。name as text type fulltext
私を助けてください、私は何かを聞きたいです、多分そのような状況で回避する別の方法がありますか?知らない。とてもありがたいです。