MYSQL COUNT 个匹配值
MYSQL COUNT number of matching values
我有一个包含 2 列的数据库。 character_id 和 killmail_id
目的是获取特定 character_id 的所有 killmail_id 的列表
然后获取所有具有匹配 killmail_id 的 character_id 并计算这些 character_id 出现的次数
到目前为止我得到了这个:($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;
}
一个选项使用 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
表示您的输入参数,您应该将其作为查询参数传递,而不是将其连接到查询字符串中。
我有一个包含 2 列的数据库。 character_id 和 killmail_id 目的是获取特定 character_id 的所有 killmail_id 的列表 然后获取所有具有匹配 killmail_id 的 character_id 并计算这些 character_id 出现的次数
到目前为止我得到了这个:($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;
}
一个选项使用 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
表示您的输入参数,您应该将其作为查询参数传递,而不是将其连接到查询字符串中。