简而言之,数据库中有 3 个表:
- 所有球员名单
- 这些玩家的名字列表(分开,因为这里有关于账户的所有数据)
- 好友列表(谁在游戏中将谁添加到好友中)
我需要从表 2(列)中获取名称,从表 1(列firstname)中获取经验量,exp并检查玩家的 id 是否在表 3 中(在列中user1)user2。
我的请求:
SELECT
f.exp AS Exp,
u.firstname AS Name
FROM farmer f
JOIN customer u ON f.userId = u.customer_id
JOIN friendship fr ON fr.user1 = 33 OR fr.user2 = 33
ORDER BY (f.exp) DESC
它有效,但获得了重复项。我做错了什么?
答案:
结果,我收到了以下请求。这是从三个表中选择的朋友列表和添加为玩家朋友的人。
SELECT DISTINCT
userId as id,
exp,
oc_customer.firstname as name,
CONCAT(IFNULL(fr1.question,''),IFNULL(fr2.question,'')) as status,
CONCAT(IFNULL(fr1.user2,''),IFNULL(fr2.user2,'')) as inviter
FROM farmer
LEFT JOIN oc_customer ON customer_id=userId
LEFT JOIN friendship as fr1 ON fr1.user1='$userId'
AND (fr1.question=2 OR fr1.question=1) AND fr1.user2=userId
LEFT JOIN friendship as fr2 ON fr2.user1=userId
AND (fr2.question=2 OR fr2.question=1)AND fr2.user2='$userId'
WHERE userId!='$userId'
AND ((fr1.question=2 OR fr1.question=1) OR (fr2.question=2 OR fr2.question=1))
ORDER BY (exp)
DESC
status - 2(好友),status - 1(好友请求),invitationer(发送请求的人)


要获得唯一值,请使用
SELECT DISTINCT ...从文档:
这意味着如果在
SELECT没有指定DISTINCTor的情况下使用DISTINCTROW,那么将使用修饰符ALL并返回所有匹配的记录。链接到文档。