繁体   English   中英

在AND语句中查询WHERE? PHP / PDO / MySQL的

[英]WHERE query inside an AND statement? PHP/PDO/MySQL

我的网站上有2个表,一个users表和一个user_friendships表,每个表的结构都如此......

用户

id  |  user_id  |  credits_bank  |  credits_offered

用户友谊

id  |  user_id  |  user_followed_id

当他在我的用户登录呈现在网站上的其他用户的列表-其他用户的列表中谁是那些存储在users表,必须在一个更大的价值credits_bank比表credits_offered表。

当创建友谊时,会话用户id存储在user_friendships表中,并且他所遵循的另一个成员的id也存储在user_followed_id表下的user_friendships表中。

问题是我现在需要一个查询来返回所有移动credits_bank不是credits_offered用户以及不在user_frienships表中的用户与会话用户在同一记录中的用户。

我目前正在使用......

SELECT DISTINCT u.*
FROM users u
    LEFT JOIN user_friendships uf ON u.user_id = uf.user_followed_id
WHERE u.user_id <> ? 
    AND u.credits_offered <= credits_bank
    AND uf.user_followed_id IS NULL

更新

我希望看到一个用户列表,其credits_bank的值大于credits_offered ,我只想显示它们,如果它们不存在于我的user_friendships表中与我的会话用户相同的行中的记录中。

用户

id  |  user_id  |  credits_bank  |  credits_offered
___________________________________________________
1        123            10                 2
2        231            6                  3
3        312            6                  5
4        213            2                  1

用户友谊

id  |  user_id  |  user_followed_id
___________________________________________________
1       123                231
2       123                312

结果

如果session user_id = 123则...

user_id 231 and 312 WOULDN'T show as they are in the user friendships table alongside session user id
user_id 213 WOULD show as they have more credits_bank than credits_offered and arent in    friendships table

如果会话user_id是312,那么他会看到所有结果,因为他与user_friendships表中的任何人不是朋友...

尝试这个:

SELECT u.id, u.user_id, u.credits_bank, u.credits_offered 
FROM users u 
WHERE u.credits_bank>u.credits_offered
    AND u.user_id = [ENTER LOGGED IN USERS ID HERE] 
    AND u.user_id NOT IN (
        SELECT f.user_ol
        FROM user_friendships f 
    )

如果您有任何问题,请告诉我

编辑最新的SQL:

SELECT u.id, u.user_id, u.credits_bank, u.credits_offered 
FROM users u 
INNER JOIN user_friendships f 
   ON f.user_followed_id = u.user_id 
       AND u.credits_bank > u.credits_offered 
       AND f.user_id != [CURRENT_USER_ID]
       AND u.user_id != [CURRENT_USER_ID]

据我所知,你很亲密。 如果当前用户的用户ID被称为SESS_USER_ID,那么这样的东西应该适合你;

SELECT DISTINCT u.*
FROM users u
LEFT JOIN user_friendships uf 
   ON uf.user_followed_id = u.user_id 
  AND uf.user_id = SESS_USER_ID
WHERE u.credits_offered <= credits_bank
  AND uf.user_followed_id IS NULL
  AND u.user_id <> SESS_USER_ID

(请注意,SESS_USER_ID在查询中使用了两次以使其变得简单)

一个要测试的SQLfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM