1

だから基本的に私は2つのテーブルを持っています。「写真」と呼ばれる最初のテーブルは次のようになります。

id title
1  Some text here
2  Another text here

「いいね」と呼ばれる2番目のテーブルは次のようになります

id photos_id user_id
1  1         10
2  1         11
3  2         12

photos_id は「photos」テーブルの ID に対応します

次のクエリを使用して全文ブール検索を行い、関連性で並べ替えています

SELECT *, MATCH (title) AGAINST ('text' in boolean mode)
AS score FROM photos
WHERE MATCH (title) AGAINST ('text' in boolean mode) order by score desc;

関連性による並べ替えはうまく機能していますが、関連性が等しい場合は、いいねの総数でも並べ替えたいと思います...「order by score, total_likes desc」のようなものです。何か助けはありますか?

4

1 に答える 1

3

それを実行して、ここでSQLFiddleLeft Joinを確認できます。

SELECT
  p.*,
       MATCH (title) AGAINST ('text' IN BOOLEAN MODE) AS score ,
       COUNT(li.id) AS total_likes 
FROM photos p
  LEFT JOIN likes li
    ON p.id = li.photo_id
     WHERE  MATCH (p.title) AGAINST ('text' IN BOOLEAN MODE) 
    GROUP BY 
      li.photo_id

ORDER BY 
      score , total_likes DESC
于 2013-05-29T11:29:25.950 に答える