php - 使用 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);
解决方案
您正在混合字符串和浮点数,这确实会带来问题。
具体来说,通过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_query
与mysql_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;
推荐阅读
- java - Java ServerSocket OutputStream 不刷新
- gcc - 尽管存在 -nostdlib,为什么 libc 依赖
- python - 像一个基本的计算器我怎么能循环这个
- amazon-web-services - 显示原始 ec2 域的 Google Oauth 屏幕。如何显示我添加的自定义域?
- python-3.x - /admin/auth/user/11/delete/ FOREIGN KEY 约束处的 IntegrityError 失败
- swift - 如何在 safari 中打开 url 而不是在 Ios 中打开其已安装的应用程序?
- django - 当我尝试登录时,Django 'User' 对象没有属性'profile'
- spring-security - 为什么我在使用基本身份验证的第二次休息通话后收到 NullPointerException?
- javascript - TypeError:无法读取未定义的属性“handleCorrectAnswers”
- bash - 如何在嵌套的while循环中从bash脚本中的stdin读取多个输入文件