0

私はウェブサイトの検索を開発しています。私は複数の列と次のような異なるフィールドを持っています:

  1. tmp_auction_auto

    id注文カテゴリメーカーモデル価格price_type場所年実行run_typeドアエアバッグギアエンジン馬力シリンダードライブタイプ燃料色abselectronicwindowsclimatcontrolディスクハッチボードコンピューターアラームrightsteerターボパーキングコントロールコンディショナーleathersalonナビゲーションcentrallockチェアウォーム油圧noprice家賃交換customclearanceステータスその他の連絡先

  2. tmp_auction_estateid 注文タイプ取引価格price_typeprice_sqmnoprice市の住所エリア高さ修理条件プロジェクト目的地ベランダマンサード会議stairs_total階段部屋寝室バルコニーsanitary_arrloggia暖炉コンディショナーガレージ駐車場land_destination建物distance_central_streetdistance_tbilisi倉庫ジャグジーバスルームシャワーサウナ家具技術電話インターネットジェネレータープールbusinesscenter在庫ワードローブエレベーターガス温水暖房インターコムcabletvアラームシステムエントランスセキュリティウィンドウガードセキュリティデュプレックストリプレックスサテライトキッチンショーケースland_railwayland_electricityland_gasland_waterland_drainageステータスその他の連絡先

  3. tmp_auction_otherid 注文タイトル価格price_typenoprice情報連絡先

  4. tmp_branchidlang タイトルコンテンツxy
  5. tmp_comments id reply_id path username email title content like dislikes time admin
  6. tmp_newsidlang タイトルコンテンツ日付

  7. tmp_pagesidlang タイトルコンテンツ日付

  8. tmp_presentationidlang タイトルの順序

私は検索を行う方法を考えていました、そして最後に私は次のコードをしました:

$key = 'a';

$sql = "
SELECT `id`,CONCAT('pages') as `table`,`title` as `title`,`content` as `content` FROM `tmp_pages` WHERE `title` LIKE '%".$key."%' OR `content` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('branches') as `table`,`title` as `title`,`content` as `content` FROM `tmp_branch` WHERE `title` LIKE '%".$key."%' OR `content` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('auction_auto') as `table`,`manufacturer` as `title`,CONCAT(`manufacturer`,' ',`model`,' / ',`price`,' ',`price_type`) as `content` FROM `tmp_auction_auto` WHERE `manufacturer` LIKE '%".$key."%' OR `model` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('auction_estate') as `table`,CONCAT(`city`,' ',`type`) as `title`,CONCAT(`city`,' ',`address`,' / ',`price`,' ',`price_type`) as `content` FROM `tmp_auction_estate` WHERE `other` LIKE '%".$key."%' OR `city` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('auction_other') as `table`,`title` as `title`,CONCAT(`title`,' ',' / ',`price`,' ',`price_type`) as `content` FROM `tmp_auction_other` WHERE `info` LIKE '%".$key."%' OR `title` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('presentation') as `table`,`title` as `title`,`title` as `contact` FROM `tmp_presentation` WHERE `title` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('news') as `table`,`title` as `title`,`content` as `content` FROM `tmp_news` WHERE `title` LIKE '%".$key."%' OR `content` LIKE '%".$key."%'
UNION
SELECT `id`,CONCAT('comments') as `comments`,`title` as `title`,`content` as `content` FROM `tmp_comments` WHERE `title` LIKE '%".$key."%' OR `content` LIKE '%".$key."%'
";

ここでの不利な点として、スクリプトがデータを検索する方法には既存の順序があることがわかります。つまり、誰かがnew office既存のものを検索すると、関連性が高いtmp.pagesのではなく、最初に表示されます。tmp.news

質問がありますが、このタイプのアプローチは大丈夫ですか?どういうわけか気に入らないのですが、もっと良い代替案があることを知っているからかもしれませんが、それでもあなたの意見が必要です。このままにしておくべきですか?多分誰かが私にもっと良い方法を教えてくれるでしょう。ありがとう!

4

1 に答える 1

1

もし私があなたなら、ユーザーが見たいエリアを選択するためのチェックボックスを提案するでしょう。また、私はテーブルに特定の重要度を与えます。重要なテーブルのグループがあり、結果が見つかった場合は、最初に表示する必要があるとします。たとえば、auction_auto、auction_estate、auction_otherです。その後、残りの部分(または必要に応じて)。

したがって、誰かが新しいオフィスを探したい場合は、支店、不動産、その他(例)をチェックします。auction_estateのランクが高いため、これらの結果が最初になります。

チェックされていないテーブルについては、「ニュースで(xxx)の結果が見つかりました」などの別のクエリを実行できます。

なぜ私はそれをするのでしょうか?

個人的には、検索したいサイトの部分を選択できるのが好きです。誰かが怠惰すぎる場合、彼らはボックスにチェックを入れません-そしてあなたが今持っているように検索はグローバルになります。そのような機能を導入することは有益だと思います。

力が嫌いな人はいますか?ページ上の検索エンジンだけでも!

于 2012-12-14T14:35:12.597 に答える