在特定条件下从数据库中获取值

时间:2015-07-24 07:40:34

标签: php mysql sql arrays mysqli

我有一个名为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

任何人都可以告诉我如何实现这一结果

2 个答案:

答案 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来排除这些用户。