这是我所拥有的(我只包括每个表格的相关单元格)
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中完全执行此操作,但我不知所措。
答案 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
语句,您应该使用预准备语句(使用PDO
或mysqli
)。
使用第一个查询的示例:
$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。