gpt4 book ai didi

mysql - sql查询构建

转载 作者:搜寻专家 更新时间:2023-10-30 23:22:55 28 4
gpt4 key购买 nike

我只是对构建 SQL 查询感到困惑。我试图成功地分段运行它,但我无法将它作为一个整体来构建。

是这样的:在表 'userseaches' 中,用户 Rushi 已经用不同的 searchID's(primary key in 'searchtable') 10, 11, 12 被搜索了 3 次。当我使用 searchID 10 进行搜索时,我得到了 110 个结果,11 得到了 112 个,12 得到了 115 个结果。

现在我要做的是搜索 ID 的 11 和 12(最近两次搜索),即 112 和 115,并获取在上次搜索(112)中新添加的那些用户的用户名,即三个用户。

我试过用小块做这个,但很难做成一个整体。请随时询问详情。

提前谢谢你。

好的,下面是 3 个表: 具有字段的表主搜索:

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)

给了所有的追随者:

但是它无法获取新添加的 friend 。

最佳答案

我的第一个建议是重新设计您的表结构。你不应该在主搜索和用户搜索中都有这个名字。这导致您必须在这两个地方更改名称。查询时的名称应该来自一个位置,而不是两个。我没有看到用户搜索表的用途。它为什么存在?我相信它包含可以从 master 和 searchtable 派生的信息。

其次,你不应该有一个你在搜索表中手动输入的 friend 。这通常会导致额外的计算工作。以编程方式将其分解或将其设置为公式,例如:

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

现在,我们需要在 searchtable 中添加一个字段来存储何时将 friend 输入到表中,我选择 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

如果您需要任何进一步的帮助,请告诉我。您应该注意,每一行都显示了“ friend ”的计数,但反射(reflect)的是主名称而不是搜索表名称。

这是创建我使用他的模型创建的表的代码。

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;

关于mysql - sql查询构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940052/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com