【问题标题】:fech values from database under particular condition在特定条件下从数据库中获取值
【发布时间】:2015-10-14 18:55:24
【问题描述】:

我有一个名为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,在上面的示例数据库 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就不会重复

谁能告诉我如何实现这个结果

【问题讨论】:

    标签: php mysql sql arrays mysqli


    【解决方案1】:

    我认为您需要如下 SQL:

    SELECT * FROM interest
    WHERE userid NOT IN (SELECT blockeduser FROM block)
    AND userid NOT IN (SELECT blockedby FROM block)
    AND interest = 'I5'
    

    【讨论】:

      【解决方案2】:

      这个呢:

      $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 排除这些用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 2022-12-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多