簡體   English   中英

MySQL的:如何只選擇列(接受)= 1的地方?

[英]Mysql: How to SELECT only where column (accepted) is = 1?

這是我的代碼,除非我僅想限制它以僅過濾來自好友表的“已接受”,否則它會正確顯示,即= 1。

SELECT users.id, users.username, users.avatar, COUNT(friends.accepted) AS friends 
FROM users
  LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
ORDER BY friends DESC LIMIT 20

如果只想讓一個朋友接受一個人,請使用HAVING (為簡單HAVINGHAVING等效於WHERE來過濾聚合結果):

SELECT users.id, users.username, users.avatar, COUNT(*) AS friends 
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
HAVING COUNT(friends.accepted) = 1
ORDER BY friends DESC LIMIT 20

如果您要計算接受的朋友數= 1,則應該使用簡單的WHERE

SELECT users.id, users.username, users.avatar, COUNT(*) AS friends 
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
WHERE friends.accepted = 1
GROUP BY users.username
ORDER BY friends DESC LIMIT 20

或者,如果您還想列出沒有朋友的人,那么他們被接受= 1:

SELECT users.id, users.username, users.avatar, 
    SUM(CASE friends.accepted = 1 THEN 1 ELSE 0 END) AS friends 
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
ORDER BY friends DESC LIMIT 20

使用具有規則的檢查條件來確認接受的計數是否為1

SELECT users.id, users.username, users.avatar, COUNT(friends.accepted) AS friends 
  FROM users
  LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
  GROUP BY users.username
having count(friends.accepted)=1
  ORDER BY friends DESC LIMIT 20

COUNT(columnname)計算columnname不為null的所有記錄。 因此,您不想使用COUNT(friends.accepted) ,因為0和1都不為空,因此您要計算所有朋友是否接受。

請改用SUM來計算所有接受的= 1。 如果用戶根本沒有朋友,那么您將獲得NULL。 在這種情況下,請使用COALESCE將NULL設置為零,如果這會打擾您的話。

SELECT 
  users.id, 
  users.username, 
  users.avatar, 
  COALESCE(SUM(friends.accepted),0) AS friends 
FROM users
LEFT JOIN friends ON users.username IN (friends.user1, friends.user2)
GROUP BY users.id
ORDER BY friends DESC LIMIT 20;

(在您對接受的朋友感興趣的簡單查詢中,您當然可以在ON子句中簡單地添加AND accepted = 1 ,以便僅獲取接受的朋友並使用COUNT 。)

另一種方法是在子查詢中計數:

SELECT id, username, avatar, 
  (
    select count(*) 
    from friends 
    where users.username in (friends.user1, friends.user2)
    and friends.accepted = 1
  ) as friends
FROM users
ORDER BY friends DESC LIMIT 20;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM