Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检索除被阻止查询的用户之外的所有条目_Php - Fatal编程技术网

Php 检索除被阻止查询的用户之外的所有条目

Php 检索除被阻止查询的用户之外的所有条目,php,Php,我有下表 id blocked blocker 1 2 1 2 4 2 3 xx xx 4 xx xx 假设我提供一个ID2 1-我想执行一个查询,其中第一个和第二个结果都将被输出 我使用下面的查询 $statement = $conn->prepare('SELECT * FROM blocks WHERE blocker = :blocker OR blocked=:blocked'); 这样

我有下表

id  blocked  blocker
1     2        1
2     4        2
3     xx       xx
4     xx       xx
假设我提供一个ID2

1-我想执行一个查询,其中第一个和第二个结果都将被输出

我使用下面的查询

$statement = $conn->prepare('SELECT * FROM blocks WHERE blocker = :blocker OR blocked=:blocked'); 
这样行吗

现在,一旦我得到了这些条目的数组

$row = $statement->fetchAll(PDO::FETCH_ASSOC)
注意:它必须得到所有行,因为在上面的示例中,我需要它们的可选值I-e1和4

其次,利用以上结果,我得到了另一个表用户。我想执行一个查询,该查询将得到除1和4(参考上表)之外的所有条目

id  username  password etc
1
2
3
4

如何在不占用大量服务器资源的情况下执行这两个查询。

您的第一个查询是错误的。。。您需要使用
而不是
来返回1和2

从blocker=:blocker或blocked=:blocked的块中选择*

现在,您可以使用联接在单个查询中获得所需的所有数据:

 SELECT u.*, b.* FROM blocks b, users u 
 WHERE (
    b.blocker = :blocker OR b.blocked=:blocked
 ) AND (
   u.id = b.blocker
   OR u.id = b.blocked
 )
请注意,这可能会为您提供与单个用户对应的2行,例如,结果可能是:

id username password etc id blocked blocker
1  user1    *******  **  1   2       1
2  user2    *******  **  1   2       1
2  user2    *******  **  2   4       2
如果您实际上不在who阻止的用户之后,那么您甚至不需要选择blocks数据,您可以对用户进行分组或区分,这样每个用户只会得到一个实例:

 SELECT DISTINCT u.* FROM users u, blocks b 
 WHERE (
    b.blocker = :blocker OR b.blocked=:blocked
 ) AND (
   u.id = b.blocker
   OR u.id = b.blocked
 )
这将产生如下结果:

id username password etc
1  user1    *******  **
2  user2    *******  **

我编辑了第一个查询:)我认为其中一个是正确的,但我对第二个查询更感好奇。除了从
用户中选择所需数据之外,您是否真的需要
块中的数据,我只需要块中的数据来获取所有id的数组,但您是否只需要这些id值来查询用户?当我阻止某人时,我的id及其id将保存为阻止程序并被阻止。现在,当我给所有用户打电话时,他不应该看到我,我也不应该看到他。上面的查询为False,而不是返回所有用户列表。