我只是在构建SQL查询时感到困惑。我试图成功运行它,但我无法整体构建它。
情况就是这样:在表'userseaches'中,用户Rushi被搜索了三次不同的searchID('searchtable'中的主键)10,11,12。当我用searchID 10搜索时,我获得了110个结果,其中11个获得了112个,12个获得了115个结果。
现在我要做的是搜索ID 11和12(最近两次搜索),即112和115,并获取在上次搜索中新添加的用户的用户名(112),即三个用户。 / p>
我用小件试过这件事,但很难整体制作。请随时询问详情。
提前谢谢。
以下是3个表格: 表mastersearches有字段:
ID Name srchtime
1 aron 22:10:10
2 rushi 12:12:14
表用户搜索字段:
ID masterID Name nooffriends
1 2 rushi 110
2 2 rushi 112
3 2 rushi 115
表格搜索表包含字段:
ID searchID Name friends
1 2 mike 25
2 2 paine 51
.
112 2 kumar 87
113 3 bandy 23
.
227 3 ganua 15
确定。
现在我想为searchID 3获取三个新添加的用户。
现在我尝试了这个(我通过此查询搜索了两个ID):
select
Name
from
usersearches
where
searchID in (11, 12)
给了所有粉丝:
但它无法获取新添加的朋友。
答案 0 :(得分:2)
我的第一个建议是重新设计你的表格结构。您不应该在mastersarches和userssarches中都有这个名字。这导致您必须在两个位置更改名称。查询时的名称应来自一个位置而不是两个位置。我没有看到表用户搜索的目的。它为什么存在?它包含可以从master和searchtable派生的信息,我相信。
其次,你不应该计算你在搜索表中手动输入的朋友。这通常会带来额外的工作来统计这一点。要么以编程方式对其进行分解,要么将其设置为公式,例如:
SELECT m.*, f.Name as 'Friends_Name', count(s.searchID) as 'Friends'
FROM searchtable f
left join searchtable s
on f.ID = f.Id
left join mastersearches m
on s.searchID = m.ID
group by f.ID
现在,我们需要在朋友进入表格时添加一个字段到搜索表来存储,我选择lastmodified作为我的字段。
SELECT m.ID, m.Name, f.Name as 'Friends_Name', count(s.searchID) as 'Friends'
FROM searchtable f
left join searchtable s
on f.ID = f.Id
left join mastersearches m
on s.searchID = m.ID
where m.srchtime < s.lastmodified
group by f.ID
如果您需要任何进一步的帮助,请告诉我。 您应该注意,“朋友”计数显示在每一行上,但反映的是主姓名而不是搜索表名称。
以下是使用他的模型创建表格的代码。
DROP TABLE IF EXISTS `stack overflow`.`mastersearches`;
CREATE TABLE `stack overflow`.`mastersearches` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` text NOT NULL,
`srchtime` time NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `stack overflow`.`searchtable`;
CREATE TABLE `stack overflow`.`searchtable` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`searchID` text NOT NULL,
`Name` text NOT NULL,
`friends` int(10) unsigned NOT NULL,
`lastModified` time NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=228 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `stack overflow`.`usersearches`;
CREATE TABLE `stack overflow`.`usersearches` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`masterID` int(10) unsigned NOT NULL,
`Name` text NOT NULL,
`nooffriends` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
答案 1 :(得分:0)
你的问题令人困惑。 “朋友”和“追随者”在您的背景下是否相同?如果是这样,那么试试这个
Select TOP 2
Name
from
usersearches
where
searchID in (11, 12) ORDER BY ID DESC
仅当ID是连续的时才会起作用。
另外,您提供了2个表“usersearches”和“searchtable”...这些表是如何相关的?
答案 2 :(得分:0)
尝试:
select Name
from usersearches
where searchID in (11, 12)
group by name
having min(searchID) = 12