我有一个名为block
的表,它具有以下结构(此处条目有限,尽管原始数据将包含许多条目)
id blockeduser blockedby
1 1 3
2 4 3
另一个表interest
看起来像这样(这里的条目有限,尽管原始数据会有很多条目)
id userid interest
1 1 I5
2 2 I5
3 3 I5
4 4 I5
5 5 I5
我想要做的是获取已阻止并被阻止的用户的id,在上面的示例数据库中我拥有的是1,4和3.获取此数据之后我想获取ID在这种情况下有共同兴趣的用户是I5,但重点是这些id的第二个列表不应该包含在第一部分中获取的那些id(即1,4,3)。
因此我应该得到以下ID 2,5
对于整个过程,我使用了以下代码:
$interest = $_REQUEST['interest'];
$myuserid = $_REQUEST['myuserid'];
$sql = "SELECT * FROM block where blockedby='".$myuserid."'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
$blockeduser=$row["blockeduser"];
$block[] = array($blockeduser);
}
/*echo "<pre>";
print_r ($block);
echo "</pre>"; */
foreach($block as $key=>$val)
{
$id = $val["0"];
$sql1 = "SELECT * FROM interest where interest='".$interest."' and userid!='".$id."' and userid!='".$myuserid."'";
echo $sql1;
}
}
我从print_r ($block)
获得的数组看起来像这样
Array
(
[0] => Array
(
[0] => 1
)
[1] => Array
(
[0] => 4
)
)
当我echo $sql1
我得到这样的结果时
SELECT * FROM interest where interest='I5' and userid!='1' and userid!='3'
SELECT * FROM interest where interest='I5' and userid!='4' and userid!='3'
但要达到最终结果,它应该是这样的(我无法得到)
SELECT * FROM interest where interest='I5' and userid!='1' and userid!='3' and userid!='4'
上述查询应该只运行一次,以便不重复ID
任何人都可以告诉我如何实现这一结果
答案 0 :(得分:2)
我认为你需要一个如下的SQL:
SELECT * FROM interest
WHERE userid NOT IN (SELECT blockeduser FROM block)
AND userid NOT IN (SELECT blockedby FROM block)
AND interest = 'I5'
答案 1 :(得分:0)
这个怎么样:
$interest = $_REQUEST['interest'];
$myuserid = $_REQUEST['myuserid'];
$sql = "SELECT * FROM block where blockedby='".$myuserid."'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0)
{
$ignoreUsers = array();
$ignoreUsers[] = $myuserid;
while($row = mysqli_fetch_assoc($result))
{
$blockeduser=$row["blockeduser"];
$ignoreUsers[] = $blockeduser;
}
/*echo "<pre>";
print_r ($block);
echo "</pre>"; */
$sql1 = "SELECT * FROM interest where interest='".$interest."' and userid NOT IN (" . implode(",", $ignoreUsers) . ")";
echo $sql1;
}
您在第二个选择中创建了一个要忽略的用户ID数组,并使用NOT IN来排除这些用户。