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

时间:2013-06-01 15:29:27

标签: php mysql pdo

我的网站上有2个表格,users表格和user_friendships表格,每个表格都是这样的...

用户

id  |  user_id  |  credits_bank  |  credits_offered

用户友谊

id  |  user_id  |  user_followed_id

当我的用户登录时,他会在网站上看到其他用户的列表 - 其他用户的列表是那些存储在users表中且在{{1}中具有更大价值的用户表比credits_bank表的表。

创建友谊时,会话用户credits_offered存储在id表中,他所关注的其他成员的ID也存储在user_friendships表下专栏user_friendships

问题是我现在需要一个查询来返回移动user_followed_id而不是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

结果

如果会话user_id = 123则...

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

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

2 个答案:

答案 0 :(得分:1)

试试这个:

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]

答案 1 :(得分:1)

据我所知,你很亲密。如果当前用户的用户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在查询中使用了两次以使其变得简单)

An SQLfiddle to test with