PHP在查询中选择多个(SQL)

时间:2019-01-09 09:20:15

标签: php mysql

我应该列出不阻止会话用户的用户。但是块位于不同的表中,我尝试在查询中进行多次选择,但它不起作用...

阻止表格列:id,block_to,block_from

SELECT * 
FROM users 
WHERE (id!={$session['id']} AND birth>='{$bd}' AND ban=0) 
UNION 
SELECT * 
FROM blocks 
WHERE block_to!={$session['id']} 
ORDER BY id DESC 
LIMIT $display,$limit

2 个答案:

答案 0 :(得分:0)

如果您不想包括阻止会话用户的用户,则需要使用NOT IN运算符,例如:

SELECT *
FROM USERS
WHERE id!={$session['id']} 
AND birth>='{$bd}' 
AND ban=0
AND ID NOT IN (
    SELECT block_to FROM blocks WHERE block_from = {$session['id']}
);

答案 1 :(得分:0)

您可以使用JOINLEFT JOIN来联接这样的表(JOIN或LEFT JOIN只是一种写亲和力)。

按条件返回所有用户过滤器,如果未找到阻止信息,则为空:

SELECT u.*, b.*
FROM users AS u
LEFT JOIN blocks AS b ON (u.id = b.block_to)

WHERE u.id!={$session['id']}

AND u.birth>='{$bd}' 
AND u.ban=0
ORDER BY id DESC 
LIMIT $display,$limit;

这必须返回所有在用户及其关联的块中没有会话过滤的用户。