表一(主表),企业表
pro_id pro_name bill_ids
1 企业1 1,2,3
2 企业2 2,4
表二 榜单表
bill_id bill_name
1 榜单1
2 榜单2
根据关键词(bill_name) 搜索企业
比如 我输入 榜单1,能搜出企业1;输入 榜单2,能搜出 企业1和2
select * from 企业表 where find_in_set((select bill_id from 榜单表 where bill_name='榜单2'),bill_ids)
我建议新建一个index表,用来保存企业和榜单的对应关系,不要放到bill_ids字段里;
然后查询,以下是我测试过的
数据量大了不能直接用like模糊查询的
SELECT * FROM _main WHERE pro_id IN (SELECT ind.pro_id FROM _pro_bill_index AS ind INNER JOIN _bd AS bd ON ind.bill_id = bd.bill_id WHERE bd.bill_name LIKE '%榜单%');
DROP TABLE IF EXISTS `_bd`;
CREATE TABLE `_bd` (
`bill_id` int(11) NOT NULL AUTO_INCREMENT,
`bill_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`bill_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `_bd` VALUES (1,'榜单1'),(2,'榜单2');
DROP TABLE IF EXISTS `_main`;
CREATE TABLE `_main` (
`pro_id` int(11) NOT NULL AUTO_INCREMENT,
`pro_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`pro_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `_main` VALUES (1,'企业1'),(2,'企业2');
DROP TABLE IF EXISTS `_pro_bill_index`;
CREATE TABLE `_pro_bill_index` (
`pro_id` int(11) unsigned NOT NULL DEFAULT '0',
`bill_id` int(11) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `_pro_bill_index` VALUES (1,1),(1,2),(1,3),(2,2),(2,4);