2016-04-13 15 views
0

私はDBテーブルを持っています。テーブルには、 'featured' = NULLまたは1の列があります。関連性の高い注目結果を昇順でソート

ユーザーはキーワードを使用してテーブルを検索できます。

SELECT SQL_CALC_FOUND_ROWS *, MATCH(`title`) 
      AGAINST ("*'.$keywords.'*") 
      AS Relevance 
      FROM jobs2 
      WHERE MATCH(`title`) 
      AGAINST ("*'.$keywords.'*") 
      ORDER BY Relevance 
      LIMIT 0,50 

私は各ページに最初にする「特色」(しかし、それぞれが順番自体はまだ仕事を紹介)されているすべてのジョブをしたい:私は(関連性)下記のように、関連性、日付、または給与によってそれらを並べ替えます。

例えば自然の検索は(順番に)返すようにした場合:

Job1 not featured 
Job2 not featured 
Job3 featured 
Job4 not featured 
Job5 featured 

私は上部におすすめの仕事をしたいためのように:

Job3 featured 
Job5 featured 
Job1 not featured 
Job2 not featured 
Job4 not featured 

どのように私はこれを達成することができますか?理想的には、SQLクエリ自体、可能な場合で

+0

'ORDERおすすめDESC BY 、関連性DESC'またはそのようなもの。 – AbraCadaver

答えて

0

さて、あなたは、単に最初のすべてのリストの機能を備えたもののすべてをしたい場合は、することができますだけでソート2列:

SELECT SQL_CALC_FOUND_ROWS *, MATCH(`title`) 
    AGAINST ("*'.$keywords.'*") 
    AS Relevance 
    FROM jobs2 
    WHERE MATCH(`title`) 
    AGAINST ("*'.$keywords.'*") 
    ORDER BY featured desc, Relevance desc -- <-- This here 
    LIMIT 0,50 

あなたが持っているしたいの代わり場合注目のリストは最初の各ページではなく、全体のソートに影響を与えそうでない場合、あなたはどちらかのアプリケーションロジックでそれを行う、またはサブクエリと同じクエリを使用し、その結果を並べ替えることができます。

SELECT * from 
    (SELECT SQL_CALC_FOUND_ROWS *, MATCH(`title`) 
    AGAINST ("*'.$keywords.'*") 
    AS Relevance 
    FROM jobs2 
    WHERE MATCH(`title`) 
    AGAINST ("*'.$keywords.'*") 
    ORDER BY Relevance desc 
    LIMIT 0,50) AS X 
ORDER BY X.featured desc, X.Relevance desc; 
+0

ありがとうございます - 私が探していた2番目の例でした – rpsep2

関連する問題