2

主にデータベースの構造が悪いために問題が発生しています。コードが非常に乱雑でテーブルが非常に大きい会社のためにこれをコーディングしているので、構造を修正するオプションではないと思います。

とにかく、私の問題は、文字列内で単独ではない値を何らかの方法でグループ化しようとしているということです...それらはコンマで区切られた値を格納しています...

field: "category" value: 'var1, var2, var3'

そして、次のクエリを使用して検索します。

SELECT name, category 
FROM companies 
WHERE (MATCH(name, category) AGAINST ('$search' IN BOOLEAN MODE) 
       OR category LIKE '$search%')

たとえば var2 と一致し(ただし、3 つの変数に限定されませんが、ソロまたはそれ以上の変数にすることができます)、PHP で手動で分割しても問題ありません。十分な一致は得られませんが、たとえば、さまざまな検索で 10 個の一致が必要です。より具体的に言うと、自動提案機能を作成しています。つまり、たとえば、「moto%」をモーターバイク、モーターのみなどと一致させたいと考えていますが、同じ値を取得し続けています。 "motorbike" を含む結果が表示されますが、DB 構造が正しくないために GROUP BY を使用できないため、それらをフィルター処理する方法がわかりません...

私はこれを見つけました: T-SQL - LIKE を使用した GROUP BY - これは可能ですか? それは解決策のように見えましたが、私が試した限りでは、私が望んでいたもので動作させることができませんでした.

だから、どの解決策があるのか​​ 疑問に思っています...これを回避する方法が絶対にない場合は、おそらくdb構造を修正する必要があるかもしれません(しかし、これは本当に最後のオプションでなければなりません)

4

3 に答える 3

2

データベース構造を適切にするための手順を開始します。追加のテーブルを作成し、分割値を入力します。

次に、適切なクエリを使用して、必要なデータを選択できます。あなたと次の開発者の両方が、クエリの速度向上は言うまでもなく、将来このプロジェクトでのトラブルが少なくなります。

于 2013-03-20T12:00:05.973 に答える
0

コメントを書けない理由がわかりませんが、これを試してみてください:

SELECT name, category FROM companies WHERE category LIKE '$search%' or LOCATE('search', category)>0;

カテゴリに「検索」値のいずれかが表示される場合、それは見えます。

于 2013-03-20T12:07:21.533 に答える
0

データベースを正しくする必要があることに同意する必要があります。後で多くの手間と時間を節約できます。ただし、使用SELECT DISTINCTすると当面の問題が解決する場合があります。

于 2013-03-20T12:08:30.937 に答える