我有一个
newsfeed
,用户可以 add posts
。我还有一些社区,它们使用与非社区帖子相同的数据库表。以下查询selects data
从我所属的社区以及公共帖子中添加,但执行速度非常慢。你能帮忙吗?
SELECT NF.postID,NF.userID,NF.url,NF.post,NF.context,NF.topic,NF.style,NF.type,NF.kind,NF.placeID,NF.audience,NF.itemID,NF.updated,NF.added,NF.expiry
FROM newsfeed NF
WHERE placeID IN (SELECT cmtyID
FROM cmty_members
WHERE userID = '$ini'
AND role !='pending'
AND role !='removed')
OR (placeID = '0' AND type = 'feed')
ORDER BY postID DESC
我尝试了内部联接,但没有产生所需的输出
CREATE TABLE `cmty_members`
(`mid` int(11) NOT NULL,
`userID` int(11) NOT NULL,
`cmtyID` int(11) NOT NULL,
`role` enum('member','admin','moderator','removed','pending') NOT NULL DEFAULT 'member',
`notifs` enum('enabled','disabled','','') NOT NULL DEFAULT 'disabled',
`sortpostsby` enum('new_posts','top_posts','newest_activity','') NOT NULL DEFAULT 'new_posts',
`added` timestamp NOT NULL DEFAULT current_timestamp()
)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `newsfeed`
(`postID` int(11) NOT NULL,
`userID` int(11) NOT NULL,
`token` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`url` text NOT NULL,
`post` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`context` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`topic` text NOT NULL,
`style` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`type` enum('feed','moment','removed','pending') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'feed',
`kind` enum('shared-post','duel-campaign','self-deleting','moment','profile','poll','games','repost','boost','cmtyInvite','cmtyDP','cmtyCDP') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`placeID` int(11) NOT NULL, `audience` enum('public','friends') NOT NULL DEFAULT 'public',
`canReply` enum('everyone','friends','nobody') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'everyone',
`itemID` int(11) NOT NULL,
`updated` timestamp NULL DEFAULT NULL,
`added` timestamp NOT NULL DEFAULT current_timestamp(),
`expiry` bigint(20) DEFAULT NULL
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
我曾经尝试过的代码 $sql = "选择 NF.postID,NF.userID,NF.url,NF.post,NF.context,NF.topic,NF.style,NF.type,NF.kind,NF.placeID,NF.audience,NF .itemID,NF.updated,NF.added,NF.expiry FROM newsfeed NF JOIN cmty_members ON cmty_members.cmtyID = NF.placeID WHERE cmty_members.userID = '{$ini}' UNION (SELECT NF.postID,NF.userID,NF .url、NF.post、NF.context、NF.topic、NF.style、NF.type、NF.kind、NF.placeID、NF.audience、NF.itemID、NF.updated、NF.add、NF.expiry FROM newsfeed NF WHERE placeID = '0' AND type = 'feed' AND Audience = 'public') ORDER BY postID DESC";