php - 在 sql 查询中检查两个独立的事物

标签 php mysql 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列中有相同的用户,它会计算该用户出现的所有次数,即:如果用户#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

enter image description here

最佳答案

带有@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/

相关文章:

PHP/AJAX 只会提交一次表单结果。第一次点击有效,第二次是空白

mysql - 选择具有不同值和最大日期的行

php - Yii2:将具有相同值的Sql数据显示到Kartik gridview中的一列中

mysql - 使用游标的过程循环中出错

php - 命中计数器sql错误

javascript - textarea 命名难题 - 使用 php 和 javascript

php - mysqli::real_escape_string 的对应物?

mysql - 单表 9 GB 数据库是好的设计吗?

sql - 从SQL 2008中的外键关系生成删除语句?

sql - 不包括加入的权利的代码解释?