获取所有小时的总和

o2gm4chl  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(302)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

9个月前关门了。
改进这个问题
我正在用php和mysql做一个项目。我有这个问题。
这是我的密码

<?php 

$proyecto = $_POST['id'];

$servername = "localhost";
$username = "dbuser";
$password = "dbpass";
$dbname = "proyectos";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT `horas`, `trabajador` FROM `horas` WHERE `proyecto` LIKE '$proyecto' ";
$result = $conn->query($sql);
$conn->close();

?>

它从post请求中获取一个参数,并在数据库中执行如下搜索:

因此,我想得到由同一个工人(trabajador列)产生的所有小时数(horas列)的总和。结果示例:
prueba1:共8小时,prueba2:共9小时

wztqucjr

wztqucjr1#

必须使用sum函数将每个worker的小时数连同group by子句添加到group workers中。格式化查询如下:

SELECT SUM(horas) AS Hours,`trabajador` 
FROM `horas` 
WHERE `proyecto` 
LIKE '%".$proyecto."%' 
GROUP BY `trabajador`

在你的代码里,

$select = "
    SELECT SUM(horas) AS Hours, `trabajador` 
    FROM `horas` 
    WHERE `proyecto` LIKE ? 
    GROUP BY `trabajador`
";

$sth = $conn->prepare($select);
$sth->execute(['%'.$proyecto.'%']);

/* Fetch all of the remaining rows in the result set */
print("Fetch all rows in the result set:\n");
$result = $sth->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);

注意:您最好切换到mysql准备的语句,以保持数据的安全并获得更好的数据库连接实践。

bvhaajcl

bvhaajcl2#

注:maniksidana的答案解释了如何使用 SUM() 以及 GROUP BY 一般来说是有效的。然而,它是混合的 mysqli 以及 PDO 接近。这是你如何使用它的例子 mysqli (正如你的问题所用)以及为什么使用事先准备好的陈述很重要。只需向表尾添加一些伪数据,然后执行它。就我个人而言,我建议只选择pdo,但这是口味的问题。

INSERT INTO `horas` (`fecha`, `horas`, `proyecto`, `trabajador`) VALUES
 ('2020-08-08', 3, 'foo bar baz', 'Joker1'),
 ('2020-08-09', 4, 'ello pomello', 'Joker2');
<?php 

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$proyecto = "ProyectpDePrueba'; DELETE FROM horas WHERE 1; -- bye bye data";
$proyecto = "ProyectpDePrueba";
$proyecto = "ProyectpDePrueba' OR 1=1 -- no more execution";

// Wrong
$sql = "
    SELECT SUM(horas) AS Hours, `trabajador` 
    FROM `horas` 
    WHERE `proyecto` LIKE '$proyecto'
    GROUP BY `trabajador`
";
$result = $conn->query($sql);
echo '<pre>Wrong' . PHP_EOL;
while ($row = mysqli_fetch_assoc($result)) {
    print_r($row);
}

// Correct
$sql = "
    SELECT SUM(horas) AS Hours, `trabajador` 
    FROM `horas` 
    WHERE `proyecto` LIKE ? 
    GROUP BY `trabajador`
";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $proyecto);
$stmt->execute();
$result = $stmt->get_result();
echo PHP_EOL . 'Corrcet' . PHP_EOL;
while ($row = $result->fetch_assoc()) {
    print_r($row);
}

$conn->close();

相关问题