我对搜索查询有问题,我必须建立在飞行从数据库返回记录。
我有两个表:adds and添加过滤器。为了简单起见,我使表的加法比现在短,删除了一些(不相关的)字段
我的表格结构:

CREATE TABLE IF NOT EXISTS `adds` (
`addid` int(11) NOT NULL AUTO_INCREMENT,
`memberid` int(11) NOT NULL,
`isnew` int(11) NOT NULL,
`catid` int(11) NOT NULL,
`manufacturerid` int(11) NOT NULL,
`modelid` varchar(255) DEFAULT NULL,
`colorid` int(11) DEFAULT NULL,
`geographicareaid` int(45) NOT NULL,
`addtypeid` varchar(45) NOT NULL,
`addcreatedon` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`addvalidfrom` date NOT NULL,
`addvaliduntil` date NOT NULL,
`addcreatedfromip` varchar(255) NOT NULL,
`yearofmanufacturing` varchar(255) DEFAULT NULL,
`monthofmanufacturing` int(11) DEFAULT NULL,
`hoursused` int(11) DEFAULT NULL,
`cc2` int(11) DEFAULT NULL,
`horsepowers` int(11) DEFAULT NULL,
`metalic` tinyint(4) DEFAULT NULL,
`isdamaged` tinyint(4) DEFAULT NULL,
`price` float DEFAULT NULL,
`hasvat` tinyint(4) NOT NULL,
`canbenegotiated` tinyint(4) DEFAULT NULL,
`addtitle` varchar(255) DEFAULT NULL,
`addtext` text NOT NULL,
`youtubevideo` varchar(255) DEFAULT NULL,
`visible` tinyint(4) DEFAULT NULL,
`ff1` varchar(255) DEFAULT NULL,
`ff2` varchar(255) DEFAULT NULL,
`ff3` varchar(255) DEFAULT NULL,
`ff4` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`addid`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=43 ;


CREATE TABLE IF NOT EXISTS `adds_filters` (
`addfilterid` int(11) NOT NULL AUTO_INCREMENT,
`addid` int(11) NOT NULL,
`filterid` int(11) NOT NULL,
 PRIMARY KEY (`addfilterid`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=45 ;

Here is the fiddle
问题是用户可以为每个添加添加添加多个筛选器,即
车辆有空调、GPS、可移动驾驶室等…这些数据存储在adds_filters中。因此,一个add可以有许多过滤器。
当用户选择catid为1,manufacturerid为1,然后用户使用id检查过滤器时,查询应该是什么样子
比如67和158?
我更喜欢视图而不是查询,但我不知道如何构建这样的视图。首选视图的原因是,在这种情况下,我将能够使用select*而不是复杂的查询。。。
任何帮助都将不胜感激。

最佳答案

使用此表结构,如果要显示filterids,则需要对每个选中的filterid进行子查询。
无需显示,您只需使用DISTINCTIN
Here is the query without displaying filterids
选择DISTINCT a*
从添加
连接添加过滤器
关于a.`addid`=f.`addid`
其中a.`catid`=1
以及a.`manufacturerid`=1
和f.‘filterid’IN(67158);
Here is the query, that displays two different filterids
选择t1.*,t2.filterid作为filterid2

(
选择DISTINCT a.*,
f.`filterid过滤`
从添加
连接添加过滤器
关于a.`addid`=f.`addid`
其中a.`catid`=1
以及a.`manufacturerid`=1
f.`filterid`=67
)t1级
加入
(
选择DISTINCT a.`addid`,
f.`filterid过滤`
从添加
连接添加过滤器
关于a.`addid`=f.`addid`
其中a.`catid`=1
以及a.`manufacturerid`=1
f.`filterid`=158
)t2型
在t1.addid=t2.addid;

关于mysql - 从2个表中获取记录数-一对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21876313/

10-12 22:30