2

私は食品データベースを持っており、「生」または「処理が最も少ない」アイテムを最初に配置する単純な検索を実装しようとしています。

たとえば、「キャロット」を検索しているとき、すべての加工食品 (キャロット ケーキなど) やファースト フード (ウェンディーズ キャロット ビッグ マックなど) を並べ替える必要はありません。1品目は「にんじん・生」「にんじん・ゆで」「にんじん冷凍」「にんじん・缶詰」などにしたいです。

MYSQLでそれを行う方法はありますか?最初に「キーワードの存在」(たとえば、「生」、「新鮮」、「ゆで」、「冷凍」など)でアイテムを並べ替え、次に他のすべての出現を並べ替えます。後?

ノート :

  • キーワードが存在する場合と存在しない場合があります
  • キーワードはどこでも構いません
  • また、検索キーワードだけを検索する必要があります。この例では、「キャロット ケーキ」が結果に残るように、この例では「キャロット」です。

どうもありがとう!

ジョエル

4

3 に答える 3

3

これはあなたのために働くかもしれません:

SELECT * FROM foods
WHERE foods.title LIKE '%carrot%'
ORDER BY foods.title LIKE '%raw%' DESC, foods.title

その理由DESCは、それが 0 または 1 を返し、1 を返した結果を最初に並べ替えたいからです。

于 2012-05-02T00:55:04.987 に答える
1

自然な単語検索では、関連性に応じてレコードが順番に返されるため、foods.title列にFULLTEXTインデックスを追加すると、次のような検索を実行できます。

SELECT *
FROM foods
WHERE MATCH (title) AGAINST ('carrot raw fresh frozen canned')
  AND title LIKE 'carrot%'

追加のLIKE基準は、「魚、缶詰」のように最初にニンジンという単語がない結果を除外します。

FULLTEXTインデックスは、現在MyISAMテーブルでのみ使用できますが、間もなく(v5.6 +)InnoDBでも使用できるようになります。

于 2012-05-02T01:51:56.767 に答える
0

食品が処理された場合に 1 を格納する「処理済み」と呼ばれる追加のフィールドがないのはなぜですか。次に、処理済みと名前で並べ替えます。

于 2012-05-02T01:06:37.030 に答える