この質問は、同じように機能するインデックス作成またはUNIONの代替案に関するものです。
さらなる例では、私たちは仮定title textし、contentfulltextindex
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
私を助けてください、私は何かを聞きたいです、多分そのような状況で回避する別の方法がありますか?知らない。とてもありがたいです。