0

我正在开发一个网站搜索。我有多个列和不同的字段,如下所示:

  1. tmp_auction_auto

    id 订单 类别 制造商 型号 价格 price_type 位置 年份 run_type 门 安全气囊 齿轮发动机 马力气缸 驱动类型 燃油颜色 abs 电子窗口 climatcontrol 磁盘 舱口板 电脑警报 右转向 turbo parkcontrol 调节器 皮革沙龙 导航 中控锁 椅子暖水力学 无价格 租金交换 海关 清关状态 其他联系方式

  2. tmp_auction_estate id 订单类型 交易价格 price_type price_sqm noprice 城市地址 面积 高度 维修条件 项目目的地 土地 阳台 mansard 会议楼梯_总楼梯 房间 卧室 阳台 sanitary_arr 凉廊 壁炉 空调 车库 停车场 土地_目的地建筑物 distance_central_street distance_tbilisi 储藏室 按摩浴缸 浴室 淋浴 桑拿 家具 技术 电话 互联网 发电机 游泳池 商务中心 吃 网络库存衣柜电梯燃气热水加热对讲有线电视报警系统入口安全窗口守卫安全双工三重卫星厨房陈列柜土地_铁路土地_电力土地_燃气土地_水土地_排水状况其他联系方式

  3. tmp_auction_other id 订单标题 price price_type noprice info 联系方式

  4. tmp_branch id lang 标题内容 xy
  5. tmp_comments id reply_id 路径 用户名 电子邮件标题 内容 喜欢 不喜欢 时间 管理员
  6. tmp_news id lang 标题 内容 日期

  7. tmp_pages id lang 标题 内容日期

  8. tmp_presentation id lang 标题顺序

我想知道如何进行搜索,最后我做了以下代码:

$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 回答