【问题标题】:How to avoid one query's match id with another query如何避免一个查询的匹配 id 与另一个查询
【发布时间】:2015-08-08 07:51:52
【问题描述】:

我的第一个查询从Table A 获得了所有相关的ID,另一个查询从Table B 获得了所有必要的ids

现在我想通过与以上两个查询不匹配的那些 id 进行第三次查询。

示例:

  1. 查询返回:1、5、10、15。
  2. 查询返回:5.
  3. 要通过以下方式进行查询:1、10、15。

这是我的工作:

//1st query:
foreach((array)$f2_ids as $indx => $value) {
    $g = mysqli_query($dbh,"SELECT id FROM update WHERE 
    `to_id`='".$pg_ids[$indx]."' AND `from_id`='".$f2_ids[$indx]."' GROUP BY id") or die(mysqli_error($dbh));
    while ($rows = mysqli_fetch_assoc($g)) {
    $ids[] = $rows['id'];
    }
}

//2st query:
foreach((array)$ids as $id) {
    $p = mysqli_query($dbh,"SELECT post_id FROM view WHERE `post_id`='".$id."' AND `user_id` ='".$session->id."'") or die(mysqli_error($dbh));
    while ($rows = mysqli_fetch_assoc($p)) {
    $Vids[] = $rows['post_id'];
    }
}

//3st query: I tried which not get proper result.
foreach((array)$ids as $index => $value) {
    if($ids[$index] !== $Vids[$index]){  // avoid match ids
    //echo $ids[$index];
    $j = mysqli_query($dbh,"SELECT * FROM update WHERE `id`='".$ids[$index]."' ORDER BY created DESC");
    }
}

更新:

foreach((array)$ids as $id) {
    $p = mysqli_query($dbh,"SELECT * 
    FROM update 
    WHERE `id` = '$id'
    AND `id` NOT IN (SELECT post_id
            FROM view
            WHERE `post_id`='$id'
            AND `user_id`='$myid')
    ORDER BY created DESC") or die(mysqli_error($dbh));
            $rows = mysqli_fetch_assoc($p);
            $id = $rows['id'];
            echo $id;
}

【问题讨论】:

  • 那么您的第三个查询应该由上述 2 个查询的 ID not returned 组成?

标签: php mysqli mysqli-multi-query


【解决方案1】:

查看subqueries

我觉得应该是这样的:

SELECT * 
FROM update 
WHERE `id` NOT IN (SELECT id 
                  FROM update 
                  WHERE `to_id`=".$pg_ids[$indx]."
                  AND `from_id`=".$f2_ids[$indx]."
                  GROUP BY id )
AND `id` NOT IN (SELECT post_id
                FROM view
                WHERE `post_id`=".$id."
                AND `user_id`=".$session->id.")
ORDER BY created DESC

【讨论】:

  • 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获得在 IN 附近使用的正确语法(SELECT id FROM update WHERE to_id
  • 看,我不知道你的桌子到底长什么样。但关键是,在 2 个子查询中,您选择了在第三个查询中不应该匹配的 ID。查询的作用是:1. 从更新中选择所有 ID(子查询 1),2.从视图中选择所有 ID(子查询 2),3.从更新中选择所有更新(完整查询),其中 id 字段不等于您在前 2 个查询中选择的 ID
  • 您的查询字段可以作为我的表,并且也理解您的查询,但无法删除该错误。谢谢
  • 再试一次我的查询,我犯了一个错误。我想它现在可以工作了
  • 请在 phpmyadmin 或您使用的工具中尝试使用 $pg_ids[$index]$f2_ids[$index]$ids[$index]$session->id 的预期值进行查询。你能告诉我确切的错误吗?
【解决方案2】:

我认为您应该使用单独的第三个查询不要从第一个和第二个查询中获取值..

【讨论】:

  • 我在尝试,但我做不到。
  • 或许看看别人在MySQL标签下是怎么提问的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
相关资源
最近更新 更多