gpt4 book ai didi

php - sql语句从其他表中使用NOT IN排序

转载 作者:行者123 更新时间:2023-11-29 08:16:39 26 4
gpt4 key购买 nike

我正在为一个类(class)设计一个简单的微博网站,需要一些有关滚动分页的 SQL 语句的帮助。

我有 2 个表:用户和关注者。

在我的“用户”表中,我有 uid、名字、姓氏、电子邮件和用户名。

我有另一个“关注”表,其中包含rid、FollowedName 和FollowingName。

例如,如果用户名“Alex”跟随用户名“Bob”,则将存在一个新行,其中包含 FollowedName="Bob"和 FollowedName="Alex"。

对于搜索页面,我允许用户根据受欢迎程度(基于关注者数量)进行排序。因此,我需要一个 SQL 语句,该语句将从“用户”中选择所有行,然后根据每个用户在“关注”表中拥有的条目数对它们进行排序。

除此之外,我需要语句来过滤掉 uid 位于字符串名称 $explodedids 中的用户。

我一切正常,但我不知道将 “WHERE uid NOT IN (".$explodedids.")”放在哪里。

这是我的语句,它正确返回但没有过滤掉 $explodedids:

"SELECT Username, FirstName, LastName, Email, COUNT( Followingname ) AS count 
FROM (SELECT u.Username, u.FirstName, u.LastName, u.Email, f.Followingname
FROM User AS u LEFT JOIN Follows AS f ON u.Username = f.Followingname)
AS T GROUP BY Username ORDER BY count DESC LIMIT ".$postnumbers

$postnumbers 只是我滚动分页的限制数量。我确信我刚刚把 WHERE NOT 放在错误的地方,但如果你们能帮助我,那就太棒了。

最佳答案

以下是满足您要求的选择语句:

--Test Data
CREATE TABLE #User ( uid int
, FirstName varchar(50)
, LastName varchar(50)
, Email varchar(50)
, Username varchar(50));

INSERT INTO #User(uid, FirstName, LastName, Email, Username) VALUES(1,'MackF','MackL','mack@mack.com','MackUname');
INSERT INTO #User(uid, FirstName, LastName, Email, Username) VALUES(2,'2F','2L','2@mack.com','2Uname');
INSERT INTO #User(uid, FirstName, LastName, Email, Username) VALUES(3,'3F','3L','3@mack.com','3Uname');
INSERT INTO #User(uid, FirstName, LastName, Email, Username) VALUES(4,'4F','4L','4@mack.com','4Uname');

CREATE TABLE #Follows( rid int
, FollowedName varchar(50)
, FollowingName varchar(50));

INSERT INTO #Follows VALUES(1,'4Uname','2Uname');
INSERT INTO #Follows VALUES(2,'MackUname','4Uname');
INSERT INTO #Follows VALUES(3,'4Uname','3Uname');
INSERT INTO #Follows VALUES(4,'MackUname','3Uname');

--Query
SELECT u.Username
, u.FirstName
, u.LastName
, u.Email
, COUNT( f.Followingname ) AS followercount
FROM #User u
LEFT JOIN #Follows f
ON u.Username = f.Followingname
WHERE uid NOT IN (2,4)--here is where your WHERE clause goes remove this line to see all records
GROUP BY u.Username
ORDER BY followercount DESC

--Results
USERNAME FIRSTNAME LASTNAME EMAIL FOLLOWERCOUNT
3Uname 3F 3L 3@mack.com 2
MackUname MackF MackL mack@mack.com 0

这是一个SQL fiddle尝试一切。

注意:我已将您的列“count”重命名为“followercount”,因为 COUNT 是保留字。

关于php - sql语句从其他表中使用NOT IN排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482018/

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