首页 > 解决方案 > 使用 2 个不同查询的结果进行计算

问题描述

下午好。我一直在尝试在 php 中获取 2 个不同查询的结果,并将它们分开以获得我计划回显到现有页面的完成百分比。下面是我到目前为止的查询和代码,但我只得到 0 的输出。当我尝试自己回显任何一个结果变量时,网站上什么都没有出现,所以由于某种原因它没有拉取值从 sql 语句开始。非常感谢所有帮助。

$sql1 = "
    SELECT format(COUNT(*),0) AS total 
      FROM ttb_books 
     WHERE owned = 1
    ";
$result1 = mysqli_query($conn, $sql1);
$row1 = mysql_fetch_array($result1);
$books_owned = floatval($row1["total"]);

$sql2 = "
    SELECT format(COUNT(DISTINCT(ttb_books.book_id)),0) AS book_samples 
      FROM ttb_books
      JOIN ttb_imgs 
        ON ttb_books.book_id = ttb_imgs.book_id
     WHERE ttb_books.owned = 1
    ";
$result2 = mysqli_query($conn, $sql2);
$row2 = mysql_fetch_array($result2);
$book_samples = floatval($row2["book_samples"]);


$sample_percent = $book_samples/$books_owned;

echo "$sample_percent";

mysqli_close($conn);

标签: phpmysql

解决方案


您正在混合字符串和浮点数,这确实会带来问题。

具体来说,通过format(COUNT(*),0)在您的 SQL 中使用,您要求将数字作为字符串,因此例如1000会返回为1,000. 然后,您将其传递给具有专用于它的整个部分的浮点解析器。

退货部分还有一条警告floatval()说:

字符串很可能返回 0,尽管这取决于字符串最左边的字符

我只是将这个示例代码作为演示运行:

$a = "1,000";
$b = floatval($a);
echo $b; // Prints 1

如果可以,请首先避免在 SQL 中使用该格式,这将为您提供真实的数字。如果你想格式化数字进行显示,那么当你真正需要的时候。

其次,出于调试目的,输出这两个数字以查看它们是否是您认为的那样。这些应该只包含数字,没有逗号。

echo $book_samples . "\n" . $books_owned;

编辑

在我走得太远之前,我不能 100% 确定你可以mysqli_querymysql_fetch_array. 选择一个并坚持下去(正如@Strawberry 指出的那样,选择mysqli)。

如果我错了,要进行其他故障排除,请确保您完全启用了错误显示。然后,确保测试每个函数的输出

ini_set('display_errors', 1);
error_reporting(E_ALL);

$sql1 = "
    SELECT COUNT(*) AS total 
      FROM ttb_books 
     WHERE owned = 1
    ";
$result1 = mysqli_query($conn, $sql1);
if(!$result){
    die('Error querying');
}
$row1 = mysqli_fetch_array($result1);
if(!$row1){
    die('Error fetching');
}
print_r($row1);
$books_owned = $row1["total"];
echo $books_owned;

$sql2 = "
    SELECT COUNT(DISTINCT(ttb_books.book_id)) AS book_samples 
      FROM ttb_books
      JOIN ttb_imgs 
        ON ttb_books.book_id = ttb_imgs.book_id
     WHERE ttb_books.owned = 1
    ";
$result2 = mysqli_query($conn, $sql2);
if(!$result2 ){
    die('Error querying 2');
}
$row2 = mysqli_fetch_array($result2);
if(!$row2 ){
    die('Error fetching 2');
}
print_r($row2);
$book_samples = $row2["book_samples"];
echo $book_samples;

推荐阅读