我正在尝试创建朋友关系查询。我希望以下查询可以做两件事,而不是进行另一个非常相似的查询。
我想检查待处理的请求和已发送的请求。待处理的请求是当用户为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仅在其friend_one列中有两次其ID,但是其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
圈子=未决计数
与@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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句