条件による複数の順序での(全文)検索のMysqlクエリ

Bipul

私は次の表を持っています:

    user
user_id | name
1          W
2          x
3          Y
4          Z

    author
auth_id | name
1          M
2          N
3          O
4          P

    preferred_author
user_id | auth_id
1          2
1          3
1          4
2          1

    book
book_id | title
1          Hello world 01
2          Hello world 02
3          Hello world 03
4          Hello world 04
5          Hello world 

  book_author
book_id | auth_id
1          2
2          3
3          4
4          1

これで、ユーザーWhello worldiという名前の本を検索すると、ユーザーの優先著者による本が最初に表示され、次に関連性に応じて他の結果が表示されます。私が試したのはselecting all the ids of preferred authors and saved in a php array

PHP:
Say, $p_auth_ids = (2, 3, 4);

次に、検索用のクエリを実行しました。

$query = "SELECT b.book_id, b.title, 
MATCH(b.title) AGAINST("hello world" IN BOOLEAN MODE) AS relevance 
FROM book AS b 
INNER JOIN book_author AS ba ON b.book_id=ba.book_id
WHERE ba.auth_id IN ('".$p_auth_ids."') 
AND 
MATCH(b.title) AGAINST("hello world" IN BOOLEAN MODE)
ORDER BY relevance DESC"

出力は次のようになります。

book_id | title

1          Hello world 01
2          Hello world 02
3          Hello world 03
5          Hello world 
4          Hello world 04

動作しませんでした。だから私が欲しいもののクエリは何である必要がありますか?ありがとう。

ニック

このクエリはあなたが望むものを与えると思います。bookテーブルをpreferred_author(via book_authorに結合し、次にテーブルに結合しuserます。JOINuser、我々は、追加user.name = 'W'ユーザの好みの著者がnull以外を持っているだけというように条件をuser_id結果セットに。次に、注文してuser_id IS NULL(ユーザーの優先著者による本の場合は0、それ以外の場合は1と評価されます)、その後に次のように注文できますrelevance DESC

SELECT b.book_id, b.title, MATCH(b.title) AGAINST("hello world" IN BOOLEAN MODE) AS relevance 
FROM book b
LEFT JOIN book_author ba ON ba.book_id = b.book_id
LEFT JOIN preferred_author pa ON pa.auth_id = ba.auth_id
LEFT JOIN user u ON pa.user_id = u.user_id AND u.name = 'W'
ORDER BY u.user_id IS NULL, relevance DESC

出力(すべてのタイトルが類似しすぎて異なる関連性の値を生成できないため、指定したとおりに並べ替えられないことに注意してください。ただし、デモでタイトルを変更すると、機能することがわかります):

book_id     title           relevance
1           Hello world 01  0.000000003771856604828372
2           Hello world 02  0.000000003771856604828372
3           Hello world 03  0.000000003771856604828372
4           Hello world 04  0.000000003771856604828372
5           Hello world     0.000000003771856604828372

dbfiddleのデモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

日付、制限、オフセットによる順序でのMySQL全文検索

分類Dev

検索ワードによるmysqlクエリの順序のように

分類Dev

特定の順序での複数の値によるORDERBYエラスティック検索

分類Dev

AmazonNeptuneでのSPARQLクエリによる全文検索

分類Dev

特定の順序で複数の値によるmysqlの順序

分類Dev

LIKEによる順序で、複数の同様の条件でクエリを実行します

分類Dev

テキストの長さによる全文検索順序

分類Dev

検索トークンの問題によるMYSQLカスタムクエリの順序

分類Dev

複数の検索条件に対する検索クエリの最適化

分類Dev

複数のループでのクエリと最後のクエリのIDによる順序付け

分類Dev

OR条件を使用した全文検索のMysqlクエリ

分類Dev

関連性によるブールモード順でのMySQL全文検索

分類Dev

GAE全文検索、複数値フィールドのクエリ

分類Dev

SQL-null値を持つ複数の列によるクエリの順序

分類Dev

mysqlクエリで複数の順序を設定します

分類Dev

複数のテキスト入力による全文検索

分類Dev

NEST C#を使用したElasticSearchでの複数のインデックスによる全文検索

分類Dev

Yii2Activeレコードで同等のクエリによるMySQLの複雑な順序

分類Dev

MySQLでの全文検索:1つのDBテーブルで複数の単語による検索を実行します

分類Dev

codeigniterのdesc制限によるMysqlクエリの順序

分類Dev

サブクエリの合計によるMySQLの順序

分類Dev

MySQLクエリで複数の属性を検索する(実際の例を使用)

分類Dev

codeigniterで複数のテーブルを検索するクエリのようなmysqlユニオン

分類Dev

最初にNULLエントリをソートする複数の列によるMySqlの順序

分類Dev

MySQLのcountサブクエリによる順序

分類Dev

列とWHERE句の条件の順序同期によるMySQLクエリの最適化

分類Dev

複数の検索用語を複数の列で全文検索

分類Dev

複数の列の順序でのSQLクエリ

分類Dev

複数の列での一致による順序付け(および複数の条件で)

Related 関連記事

  1. 1

    日付、制限、オフセットによる順序でのMySQL全文検索

  2. 2

    検索ワードによるmysqlクエリの順序のように

  3. 3

    特定の順序での複数の値によるORDERBYエラスティック検索

  4. 4

    AmazonNeptuneでのSPARQLクエリによる全文検索

  5. 5

    特定の順序で複数の値によるmysqlの順序

  6. 6

    LIKEによる順序で、複数の同様の条件でクエリを実行します

  7. 7

    テキストの長さによる全文検索順序

  8. 8

    検索トークンの問題によるMYSQLカスタムクエリの順序

  9. 9

    複数の検索条件に対する検索クエリの最適化

  10. 10

    複数のループでのクエリと最後のクエリのIDによる順序付け

  11. 11

    OR条件を使用した全文検索のMysqlクエリ

  12. 12

    関連性によるブールモード順でのMySQL全文検索

  13. 13

    GAE全文検索、複数値フィールドのクエリ

  14. 14

    SQL-null値を持つ複数の列によるクエリの順序

  15. 15

    mysqlクエリで複数の順序を設定します

  16. 16

    複数のテキスト入力による全文検索

  17. 17

    NEST C#を使用したElasticSearchでの複数のインデックスによる全文検索

  18. 18

    Yii2Activeレコードで同等のクエリによるMySQLの複雑な順序

  19. 19

    MySQLでの全文検索:1つのDBテーブルで複数の単語による検索を実行します

  20. 20

    codeigniterのdesc制限によるMysqlクエリの順序

  21. 21

    サブクエリの合計によるMySQLの順序

  22. 22

    MySQLクエリで複数の属性を検索する(実際の例を使用)

  23. 23

    codeigniterで複数のテーブルを検索するクエリのようなmysqlユニオン

  24. 24

    最初にNULLエントリをソートする複数の列によるMySqlの順序

  25. 25

    MySQLのcountサブクエリによる順序

  26. 26

    列とWHERE句の条件の順序同期によるMySQLクエリの最適化

  27. 27

    複数の検索用語を複数の列で全文検索

  28. 28

    複数の列の順序でのSQLクエリ

  29. 29

    複数の列での一致による順序付け(および複数の条件で)

ホットタグ

アーカイブ