2016-11-18 44 views
0

我正在尝试创建一个朋友关系查询。我想要下面的查询做两件事,而不是做另一个非常类似的查询。在SQL查询中检查两个单独的东西

我想检查挂起的请求和发送的请求。待处理的请求是用户为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列相同的用户也计算所有的OCCURENCES用户的occurence即:如果用户#2有他的身份证在friend_one列只有2次,但他的身份证出现在friend_two列的8次,查询将计数10,因为m,y where子句。我需要的值是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

圈= PENDING_COUNT

enter image description here

+0

为什么你需要在'friend_one'和'friend_two' where子句为'WHERE friend_one OR friend_two =?'??? – Viki888

+0

如果你指的是我在我的问题中写的? 'WHERE friend_one =?至于pending_user WHERE friend_two =? AS sent_user'我不确定如何写我想要的东西,我只是把它放在其他人的头上以获得清晰。 – Paul

+1

只需提供样品数据和您的预期结果。 – Viki888

回答

1

@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 
+0

这没有奏效。我试了一下如何编写它,之后没有工作我调整了这一节'WHERE @name IN(?)'和'AND'status' =?'....尽管如此,没有运气。我也需要包含SELECT *。 – Paul

+0

以及代码在MySql中正常工作。你不能把*放在这个查询上,因为你需要一个'group by'。我想你是SQL新手,你必须写一个更好的问题来解释你有什么和你需要什么。向我们展示两者的样本数据。请阅读[** How-to-Ask **](http:// stackoverflow。com/help/how-to-ask) \t \t这里是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-to-post-at -sql-question-on-a-public-forum /)来学习如何提高你的问题质量并获得更好的答案。 –

+0

在这里,你走了。 http://sqlfiddle.com/#!9/e20472/1 ...如果'friend_one =?'(占位符是user_id 5),我想'AS pending_count'提出计数2,然后为'由于requests_sent'的值应该是1(如果user_id/placeholder为5)。 – Paul

相关问题