私はウェブサイトの検索を開発しています。私は複数の列と次のような異なるフィールドを持っています:
tmp_auction_auto
id注文カテゴリメーカーモデル価格price_type場所年実行run_typeドアエアバッグギアエンジン馬力シリンダードライブタイプ燃料色abselectronicwindowsclimatcontrolディスクハッチボードコンピューターアラームrightsteerターボパーキングコントロールコンディショナーleathersalonナビゲーションcentrallockチェアウォーム油圧noprice家賃交換customclearanceステータスその他の連絡先
tmp_auction_estateid 注文タイプ取引価格price_typeprice_sqmnoprice市の住所エリア高さ修理条件プロジェクト目的地ベランダマンサード会議stairs_total階段部屋寝室バルコニーsanitary_arrloggia暖炉コンディショナーガレージ駐車場land_destination建物distance_central_streetdistance_tbilisi倉庫ジャグジーバスルームシャワーサウナ家具技術電話インターネットジェネレータープールbusinesscenter在庫ワードローブエレベーターガス温水暖房インターコムcabletvアラームシステムエントランスセキュリティウィンドウガードセキュリティデュプレックストリプレックスサテライトキッチンショーケースland_railwayland_electricityland_gasland_waterland_drainageステータスその他の連絡先
tmp_auction_otherid 注文タイトル価格price_typenoprice情報連絡先
- tmp_branchidlang タイトルコンテンツxy
- tmp_comments id reply_id path username email title content like dislikes time admin
tmp_newsidlang タイトルコンテンツ日付
tmp_pagesidlang タイトルコンテンツ日付
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
質問がありますが、このタイプのアプローチは大丈夫ですか?どういうわけか気に入らないのですが、もっと良い代替案があることを知っているからかもしれませんが、それでもあなたの意見が必要です。このままにしておくべきですか?多分誰かが私にもっと良い方法を教えてくれるでしょう。ありがとう!