我正在尝试创建好友关系查询。我希望以下查询做两件事,而不是进行另一个非常相似的查询。
我想检查待处理的请求和已发送的请求。待处理请求是指用户是friend_two 时的请求。当friend_one为user_id时发送请求。
那么,我是否可以将 where 子句调整为类似这样的内容(我不知道如何用 SQL 写出来)-
WHERE friend_one = ? As pending_user
WHERE friend_two = ? AS sent_user
我不确定是否可以将 AS
添加到 where 子句中。关于我上面刚刚编写的代码,占位符值将是相同的值,我不确定如何在 php 中编写它。
现在,如果我在friend_one和friend_two列中有相同的用户,它会计算该用户出现的所有次数,即:如果用户#2的id在friend_one列中只出现了2次,但他的id出现了在friend_two列中出现8次,由于m,y where子句,查询将计数10。我需要值为 2 和 8。
我该怎么做?请参阅下面的代码和表格。
SELECT *, COUNT(friend_one) AS pending_count , COUNT(friend_two) AS requests_sent
FROM friends
WHERE friend_one OR friend_two = ?
AND status = ?
好友表
Table
Create Table
friends
CREATE TABLE `friends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`friend_one` int(11) NOT NULL DEFAULT '0',
`friend_two` int(11) NOT NULL DEFAULT '0',
`status` enum('0','1','2') COLLATE utf8_unicode_ci DEFAULT '0',
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `friend_two` (`friend_two`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
方形 = requests_sent
圆圈=待处理的_count
最佳答案
带有@name、@status
参数。我相信你想要这样的东西。
SELECT COUNT(CASE WHEN `friend_one` = @name THEN 1 END) as `pending_count`,
COUNT(CASE WHEN `friend_two` = @name THEN 1 END) as `requests_count`
FROM friends
WHERE @name IN ( `friend_one` , `friend_two` )
AND `status` = @status
关于php - 在 sql 查询中检查两个独立的事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679724/