从 2 个表中获取记录数 - 一对多关系
Posted
技术标签:
【中文标题】从 2 个表中获取记录数 - 一对多关系【英文标题】:getting number of records from 2 tables - one to many relationship 【发布时间】:2014-02-19 09:34:25 【问题描述】:我有搜索查询的问题,我必须即时构建以从数据库中返回记录。
我有 2 个表:adds and
adds_filters`。为了简单起见,我使表格添加的时间比实际短,删除了一些(不相关的)字段
我的表结构:
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
。因此,一个添加可以有多个过滤器。
当用户选择 catid
为 1,manufacturerid
为 1 然后用户使用 id 检查过滤器时,查询应该是什么样子
例如 67 和 158?
我更喜欢查看查询,但我不知道如何构建这样的视图。首选视图的原因是,在这种情况下,我将能够使用 select * 而不是复杂的查询...
任何帮助将不胜感激。
【问题讨论】:
为清楚起见,请提供SHOW CREATE TABLE adds;
和SHOW CREATE TABLE adds_filters;
。如果它太大,你可以post it here
Alexander,我只是编辑我的帖子,请看一下
Here is the fiddle for you 添加一些插入,这样我们就可以获得样本数据,并提供所需的输出(以及您已经尝试过的查询)
我在表格中添加数据...请检查。
您需要提供链接。每次修改时,小提琴都会发生变化,因此您的小提琴已经有另一个 url :)
【参考方案1】:
使用此表结构,如果要显示 filterid
s,则需要为每个选中的 filterid
设置子查询。
不显示,你可以使用DISTINCT
和IN
。
Here is the query without displaying filterid
s
Here is the query, that displays two different filterid
s:
【讨论】:
这不是问题。我的问题是必须在 2 个表之间进行连接。请重新阅读我的问题,尤其是代码的下面部分以上是关于从 2 个表中获取记录数 - 一对多关系的主要内容,如果未能解决你的问题,请参考以下文章
无法删除一对多关系中的记录 laravel eloquent