【问题标题】:MYSQL COUNT number of matching valuesMYSQL COUNT 个匹配值
【发布时间】:2020-10-31 21:52:09
【问题描述】:

我有一个包含 2 列的数据库。 character_id 和 killmail_id 对象是获取特定 character_id 的所有 killmail_id 的列表 然后获取所有具有匹配 killmail_ids 的 character_ids 并计算这些 character_ids 出现的次数

到目前为止,我得到了这个:($target 是要搜索的 character_id)

SELECT `character_id`, COUNT(`killmail_id`) FROM `attackers` WHERE $target NOT IN (SELECT `killmail_id` FROM `attackers` WHERE `character_id` <> $target) AND `character_id` <> $target  GROUP BY `killmail_id` ;

这几乎可以工作,但它会计算一个角色拥有的 killmail_id 总数 如果 $target 也有匹配的 killmail_id,我只希望它计算 killmail_id

如果这没有意义,这就是我之前使用的 (PHP),我正在尝试通过使用更具体的 SQL 语句来消除循环。

function seenWith($target){
    $sql = "SELECT `killmail_id` FROM `attackers` WHERE character_id='" . $target . "';";
    $mySql = $db->prepare($sql);
    $mySql->execute();
    $results = $mySql->fetchAll();
    $friends = array();
    foreach ($results as $idx => $array){
        foreach ($array as $key => $value){
            $sql = "SELECT `character_id`,`killmail_id` FROM `attackers` WHERE killmail_id='$value' AND character_id<> '".$target."';";
            $mySql = $db->prepare($sql);
            $mySql->execute();
            $rData = $mySql->fetchAll();
            foreach($rData as $index => $friendName){
                array_push($friends, htmlspecialchars($friendName['character_id'], ENT_QUOTES));
            }
        }
    }
    return $friends;
}

【问题讨论】:

  • 更新您的问题添加适当的数据样本和预期结果
  • 您好,您应该提供 sql 插入脚本和创建脚本,它们在数据库中运行时会创建数据库对象。
  • 尝试添加数据样本,失败。不知道我在做什么(我在这里的第一篇文章)
  • 尝试mysql工作台中的导出/导入选项,如果敏感请修改列名和数据。

标签: php mysql sql select subquery


【解决方案1】:

一个选项使用exists

select character_id, killmail_id
from attackers a
where
    character_id <> :target
    and exists (
        select 1
        from attackers a1
        where 
            a1.character_id = :target
            and a1.killmail_id = a.killmail_id
    )

:target 表示您的输入参数,您应该将其作为查询参数传递,而不是将其连接到查询字符串中。

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2012-10-23
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多