3

これが可能かどうかわからない

100 個のキーワードがあり、MATCH AGAINST クエリを実行して、それらのキーワードがテーブルに存在するかどうかを確認しています。クエリは正常に機能します。

SELECT * FROM questions_new WHERE MATCH (question_title,question)
AGAINST ('depreciation amortization npv dcf "discounted cash flow" "cash flow statement" "current assets"' IN BOOLEAN MODE);

これは、いくつかのキーワードを含む単なるサンプル クエリです。

結果は次のように返されます。

question_id | question_title            |  question
    1       | what is depreciation      |  I am trying to do this DCF calculation......
    2       | Need help with this       |  what is a cash flow statement
    3       | Cannot solve this problem |  Can you give more examples on npv

これはサンプルの結果セットです。明らかに、私の結果セットははるかに大きくなります。

question_title または question を見ると、キーワード リストが膨大なため、一致したキーワードを見つけるのは非常に困難です。

以下に示すように、一致したキーワードを結果セットに含めることができるかどうか疑問に思っていました

question_id |        keyword      | question_title            |  question
    1       | depreciation, DCF   | what is depreciation      |  I am trying to do this DCF calculation......
    2       | cash flow statement | Need help with this       |  what is a cash flow statement
    3       | npv                 | Cannot solve this problem |  Can you give more examples on npv

最初の結果を見るとわかるように、一致した 2 つのキーワード (Depreciation と DCF) が表示されます。

とにかくこれを行うことはありますか。

事前に感謝します あなたの助けに感謝します

4

2 に答える 2

1

これを試してみてください。私にとってはうまくいきます。

SELECT column1, column2,
cASE when column1 like '%word1%' then "word1" 
when column1 like '%word2%' then "word2" 
when column1 like '%word3%' then "word3" 
when column1 like '%word4%' then "word4" end  as matched_word
FROM table_name WHERE MATCH (column1,column2)
AGAINST ('"word1" "word2" "word3" "word4"' IN BOOLEAN MODE);

column2 にそれぞれ 2 番目の case ステートメントを使用できます。両方の列matched_valueを一緒に表示したい場合は、これを使用してください-

SELECT column1, column2,
ifnull((cASE when column1 like '%word1%' then "word1" 
when column1 like '%word2%' then "word2" 
when column1 like '%word3%' then "word3" 
when column1 like '%word4%' then "word4" end),
(cASE when column2 like '%word1%' then "word1" 
when column2 like '%word2%' then "word2" 
when column2 like '%word3%' then "word3" 
when column2 like '%word4%' then "word4" end))  as matched_word
FROM table_name WHERE MATCH (column1,column2)
AGAINST ('"word1" "word2" "word3" "word4"' IN BOOLEAN MODE);
于 2013-10-08T07:49:14.333 に答える
0

ケース付き/if.

concat(
   if(yourcolumn like"%keyword%", 'keyword ', ''),
   if(yourcolumn like"%keyword2%", 'keyword2 ', ''),
   if(yourcolumn like"%keyword3%", 'keyword3 ', '')
) as found_keywords
于 2013-10-08T07:36:39.563 に答える