两个表中的SQL查询计数

时间:2018-06-06 17:58:28

标签: php sql

这是我所拥有的(我只包括每个表格的相关单元格)

table1:
 - user_id

table2:
 - id
 - manager_id

...我有一个PHP变量

$manager_id

所以,我想要做的是得到一个COUNT(*)表示table1中存在多少条记录,但只有当table1.user_id(table2.id)有一个table2.manager_id时才应该记录该记录。 == $ manager_id

所以,我知道如何做到这一点的唯一方法就是在PHP中做这样的事情(效率极低):

$query = "SELECT user_id FROM table1 WHERE {my where clause}";
// execute query and place into $item[] array (not shown for brevity)
foreach ( $item as $user_id ) {
$query = "SELECT manager_id FROM table2 WHERE id = '{$user_id}';
// execute query, place each item into $row
if ( $row['manager_id'] == $manager_id ) {
// tick up count by 1
}

我相当确定有一种方法可以在SQL中完全执行此操作,但我不知所措。

3 个答案:

答案 0 :(得分:1)

您可以尝试以下查询:

./ecs-cli.exe compose --project-name AdminUI service up --create-log- 
groups --cluster-config AdminUIConfig

答案 1 :(得分:0)

您可以使用一个SELECT语句执行此操作:

SELECT COUNT(*) 
FROM table1 
WHERE user_id IN (
    SELECT id 
    FROM table2 
    WHERE manager_id = <your-value-of-manager-id>
)

如果您需要使用数据并希望依靠PHP方面,您可以使用SELECT使用以下LEFT JOIN语句:

SELECT table1.* 
FROM table1 LEFT JOIN table2 ON table1.user_id = table2.id 
WHERE table2.manager_id = <your-value-of-manager-id>

要执行SELECT语句,您应该使用预准备语句(使用PDOmysqli)。

使用第一个查询的示例:

$sql = 'SELECT COUNT(*) FROM table1 WHERE user_id IN (SELECT id FROM table2 WHERE manager_id = ?)';
$sth = $dbh->prepare($sql);
$sth->execute([$manager_id]);

$rows = $sth->fetchAll();

if (count($rows) === 1) {
    echo $rows[0][0];
}

使用第二个查询的示例:

$sql = 'SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.user_id = table2.id WHERE table2.manager_id = ?';
$sth = $dbh->prepare($sql);
$sth->execute([$manager_id]);

$rows = $sth->fetchAll();

echo count($rows);

答案 2 :(得分:0)

您需要将where子句设置为具有此条件,即 SELECT Count(user_id)FROM table1 where table1.user_id = table2.id AND转换(&#39; Varchar&#39;,table2.manager_id)= $ manager_id

我假设您的php变量$ manager_id有一个字符串 如果它不是数字,那么就不需要将sql列(table2.manager_id)转换为varchar。

相关问题