php针对查询结果进行判断

如下判断无效(当res不为空是echo1,反之echo res1),该如何修改?

<?php
header('content-type:application/json');

//$id= $_GET['id'];
//$name= $_GET['name'];
 
$id= '1223';
$name= 'LILY';

// 连接数据库
require '../connect/pdo_connect_db.php';
    
 $res = $pdo->query("SELECT * FROM (
    SELECT a.subject,a.type,b.teacher FROM table1 a 
    LEFT JOIN table2 b ON a.subject= b.subject WHERE a.subject
    = (SELECT subject FROM table3 WHERE id ='$id' ORDER BY operation_time DESC LIMIT 1)
    )y WHERE name= '$name'")->fetchall(PDO::FETCH_ASSOC);    
 $res1 = $pdo->query("SELECT a.subject,a.type,b.teacher FROM table1 a 
LEFT JOIN table2 b ON a.subject= b.subjectWHERE a.subject
= (SELECT subject FROM table3 WHERE id='$id' ORDER BY operation_time DESC LIMIT 1)")->fetchall(PDO::FETCH_ASSOC);

if($res) {
    echo "1";
} else{
    echo json_encode($res1);
} 

引用 皆我百晓生 小程序回复内容作答:
要修改这段代码,可以将判断条件改为判断$res是否为空数组。如果$res不为空,则输出"1";反之,输出$res1的JSON格式结果。

修改后的代码如下:

<?php
header('content-type:application/json');

//$id= $_GET['id'];
//$name= $_GET['name'];

$id= '1223';
$name= 'LILY';

// 连接数据库
require '../connect/pdo_connect_db.php';

$res = $pdo->query("SELECT a.subject,a.type,b.teacher FROM table1 a 
LEFT JOIN table2 b ON a.subject= b.subject WHERE a.subject
= (SELECT subject FROM table3 WHERE id ='$id' ORDER BY operation_time DESC LIMIT 1)
)y WHERE name= '$name'")->fetchAll(PDO::FETCH_ASSOC);
$res1 = $pdo->query("SELECT a.subject,a.type,b.teacher FROM table1 a 
LEFT JOIN table2 b ON a.subject= b.subject WHERE a.subject
= (SELECT subject FROM table3 WHERE id='$id' ORDER BY operation_time DESC LIMIT 1)")->fetchAll(PDO::FETCH_ASSOC);

if(!empty($res)) {
    echo "1";
} else{
    echo json_encode($res1);
}

修改后的代码中,使用!empty($res)判断$res是否为空数组。如果不为空,则输出"1";反之,则输出$res1的JSON格式结果。

【以下回答由 GPT 生成】

为了优化这段代码中的查询结果判断逻辑,我会进行以下几个步骤的修改:

  1. SELECT语句中,使用COUNT(*)函数来查询满足条件的记录数,而不是查询所有的字段。这样可以减少不必要的资源浪费。
$query = "SELECT COUNT(*) FROM (
    SELECT a.subject,a.type,b.teacher FROM table1 a 
    LEFT JOIN table2 b ON a.subject = b.subject WHERE a.subject = 
    (SELECT subject FROM table3 WHERE id = '$id' ORDER BY operation_time DESC LIMIT 1)
    ) y WHERE name = '$name'";
$count = $pdo->query($query)->fetchColumn();
  1. 使用PDOStatementrowCount()方法来获取查询结果的行数,从而判断结果是否为空。
if($count > 0) {
    echo "1";
} else {
    echo json_encode($res1);
}
  1. 对于第二次查询$res1,可以直接使用前面已经查询过的结果$res,避免重复的查询操作,提高代码执行效率。
if($count > 0) {
    echo "1";
} else {
    echo json_encode($res);
}

这样,我们通过减少查询字段、使用rowCount()方法以及避免重复查询操作,实现了对代码的优化。现在,代码的查询结果判断逻辑更加简洁和高效。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^