全文搜索mysql结果未来

时间:2017-09-15 06:27:11

标签: mysql full-text-search

我正在尝试在两个单独的表中进行全文搜索,并按相关性对结果进行排序。我没有收到相关数据。下面是我的表结构和我正在使用的查询 - 我有两个表“交易”和“出口”现在我想进行全文搜索,因为用户只能搜索标题和地址。请参阅表格和查询

表1:

CREATE TABLE `deals` (
  `id` int(11) NOT NULL,
  `outlet_store_id` int(6) DEFAULT NULL,
  `title` varchar(250) DEFAULT NULL,
  `description` text,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `deals` (`id`, `outlet_store_id`, `title`, `description`, `created_at`, `updated_at`) VALUES
(1, 1, 'Great Deal Flat 50% Off', '40% of on all the shoes', '2017-09-10 00:00:00', '2017-09-05 05:08:14'),
(5, 4, 'Flat 50% off', 'sdfsdf sfsdf ds', '2017-09-12 11:54:14', '2017-09-12 11:57:03');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `deals`
--
ALTER TABLE `deals`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `deals` ADD FULLTEXT KEY `title` (`title`);

**Table 2**
CREATE TABLE `outlet_stores` (
  `id` int(11) NOT NULL,
  `name` varchar(200) DEFAULT NULL,
  `address` text,
  `longitude` varchar(30) DEFAULT NULL,
  `latitude` varchar(30) DEFAULT NULL,
  `status` tinyint(2) NOT NULL DEFAULT '1',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `outlet_stores`
--

INSERT INTO `outlet_stores` (`id`, `name`, `address`, `longitude`, `latitude`, `status`, `created_at`, `updated_at`) VALUES
(1, 'Polo-011', 'SCO-89,90,91, 1st Floor, Sector 17 D', '76.755181', '30.734015', 0, '2017-08-22 00:00:00', '2017-09-06 11:47:49'),
(3, 'Tommy Highflier', 'SCO 11-12, Sector 17D, Chandigarh', NULL, NULL, 1, '2017-09-05 11:09:48', '2017-09-05 11:09:48'),
(4, 'Kapson Store', 'Elante Mall, Chandigarh', NULL, NULL, 1, '2017-09-12 11:20:50', '2017-09-12 11:20:50');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `outlet_stores`
--
ALTER TABLE `outlet_stores`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `outlet_stores` ADD FULLTEXT KEY `address` (`address`);

我想要什么

我的网站上只有一个输入,用户可以搜索“平50%的折扣”和“在elante商城平50%的折扣”,所以在我的查询后,如果用户搜索“平面”,我会得到相同的记录然后它返回所有记录,如果用户搜索位置然后它返回实际匹配,如果没有记录然后它返回空,但一些建议假设“在elante商城平50%的折扣”,如果没有记录,那么它搜索平50%并返回一些建议结果。

我正在使用的查询

SELECT *, 
 MATCH(deals.title) AGAINST($q) as deals,
 MATCH(outlet_stores.address) AGAINST($q) as outlet_stores
FROM deals 
LEFT JOIN outlet_stores ON deals.outlet_store_id = outlet_stores.id  
WHERE 
 MATCH(deals.title) AGAINST($q)
 OR MATCH(outlet_stores.address) AGAINST($q);

0 个答案:

没有答案