1

2 つの異なるテーブル (クエリの左結合で接続) の 2 つの列に対するクエリがあり、探している用語の出現によって検索結果を並べ替えたいと考えています。私はこれをステートメントのソート変数として思いつきました。これはエレガントではないかもしれませんが、うまく機能します:

((LENGTH(table1.column)-LENGTH(REPLACE(lower(table1.column),lower('$term'),'')))/LENGTH('$term') AS sort_frequency

$term は私の検索用語であり、クエリの最後でこれを行います: ORDER BY sort_frequency DESC.

ここで問題が発生します。計算は両方のテーブルで別々にうまく機能しますが、2 つを足し算で接続したい場合、table2 の結果は常に table1 の結果の前に来て、何も順序付けられません。私のステートメントは次のようになります。

(((LENGTH(table1.column)-LENGTH(REPLACE(lower(table1.column),lower('$term'),'')))/LENGTH('$term')) + ((LENGTH(table2.column)-LENGTH(REPLACE(lower(table2.column),lower('$term'),'')))/LENGTH('$term'))) AS sort_frequency

検索結果は 2 つの異なるテーブルから取得されるため、この計算が必要ですが、1 つのページで一緒に並べられる必要があります (たとえば、1 つのテーブルは特定のキーワードを含む画像に関するもので、2 つ目のテーブルは特定のキーワードを含むビデオに関するものです)特定のキーワード 画像であれ動画であれ、自分のキーワード クエリに最も適合するキーワードが必要です)。

計算がうまくいかない理由はわかりますか?私の間違いは何ですか?ブラケットの追加/削除を試みましたが、解決しません。

どんな助けでも大歓迎です、

4

1 に答える 1

0

出現箇所を検索する前に、UNION を使用して 2 つのテーブルを結合しようとしましたか? 私の提案は、次のようなものを使用することです。

SELECT((LENGTH(newcolumn)-LENGTH(REPLACE(lower(newcolumn),lower('$term'),'')))/LENGTH('$term') AS sort_frequency FROM table1.column UNION table2.column AS newcolumn
于 2012-12-07T11:42:03.863 に答える