2

これが私の問題です。

事前定義されたキーワードを使用して検索できる本のデータベースを備えたWebサイトがあります。データベースでは、書籍ごとに、各キーワードの関連性の値(1から5)を使用して、最大20の異なるキーワード(「管理」、「リーダーシップ」など)を書籍に追加できます。このとき、特定のキーワードを選択すると、そのキーワードがテーマとして保存されているすべての本を並べ替えることができます。

データベースには、キーワードごとに1つのフィールドがあり、値ごとに1つのフィールドがあるため、20のキーワードに対して40のフィールドがあります。

私の問題は、キーワードが本に追加された順序(最初から20番目)に基づいて本が奇妙な方法でソートされ、関連性の値がフィールドごとにのみ考慮されることです(最初のキーワードが最初のキーワードなど)。 。

私が欲しいのは、これらを次のように並べ替えることができることです。最初に、キーワード値が5の本、次に4など、本に追加された最初または最後のキーワードに関係なく、1になります。実際、それは本当に「関連性による」という意味です。

「ORDERBYCONCAT」を使ってみましたが、何も変わりませんでした。

特定のキーワードを使用したクエリの例を次に示します。

SELECT *,
        IF(id_theme_1=13,id_theme_deg_1,0) AS isInDeg_1,
        IF(id_theme_2=13,id_theme_deg_2,0) AS isInDeg_2,
        IF(id_theme_3=13,id_theme_deg_3,0) AS isInDeg_3,
        IF(id_theme_4=13,id_theme_deg_4,0) AS isInDeg_4,
        IF(id_theme_5=13,id_theme_deg_5,0) AS isInDeg_5,
        IF(id_theme_6=13,id_theme_deg_6,0) AS isInDeg_6,
        IF(id_theme_7=13,id_theme_deg_7,0) AS isInDeg_7,
        IF(id_theme_8=13,id_theme_deg_8,0) AS isInDeg_8,
        IF(id_theme_9=13,id_theme_deg_9,0) AS isInDeg_9,
        IF(id_theme_10=13,id_theme_deg_10,0) AS isInDeg_10,
        IF(id_theme_11=13,id_theme_deg_11,0) AS isInDeg_11,
        IF(id_theme_12=13,id_theme_deg_12,0) AS isInDeg_12,
        IF(id_theme_13=13,id_theme_deg_13,0) AS isInDeg_13,
        IF(id_theme_14=13,id_theme_deg_14,0) AS isInDeg_14,
        IF(id_theme_15=13,id_theme_deg_15,0) AS isInDeg_15,
        IF(id_theme_16=13,id_theme_deg_16,0) AS isInDeg_16,
        IF(id_theme_17=13,id_theme_deg_17,0) AS isInDeg_17,
        IF(id_theme_18=13,id_theme_deg_18,0) AS isInDeg_18,
        IF(id_theme_19=13,id_theme_deg_19,0) AS isInDeg_19,
        IF(id_theme_20=13,id_theme_deg_20,0) AS isInDeg_20
FROM mng_ouvrages
WHERE lang='fr' AND publish=1
ORDER BY CONCAT(isInDeg_4,isInDeg_2,isInDeg_3,isInDeg_1,isInDeg_5,isInDeg_6,isInDeg_7,isInDeg_8,isInDeg_9,isInDeg_10,
                isInDeg_11,isInDeg_12,isInDeg_13,isInDeg_14,isInDeg_15,isInDeg_16,isInDeg_17,isInDeg_18,isInDeg_19,isInDeg_20) DESC

これにより、最初に4番目のフィールド(関連性3)にキーワードが格納された本を取得してから、1番目のフィールド(関連性5)にキーワードが格納された本を取得します。

この種のソートを行う方法があるかどうか誰かが知っていますか?

助けてくれて本当にありがとうございます。

4

1 に答える 1

0

MySQLのGREATEST()関数を使用して、すべてのキーワードで最大の関連性の値を取得できます。

ORDER BY GREATEST(COALESCE(keyword_1_value,0), COALESCE(keyword_2_value,0),
    COALESCE(keyword_3_value,0, ..., COALESCE(keyword_20_value,0)) DESC
于 2013-02-04T16:28:36.303 に答える