2016-11-18 43 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

相關問題