2

我遇到了相当简单的查询!

简而言之,我创建了一个搜索(过滤器)面板,现在我正在向它添加分页。

我在返回当前查询中的行数时遇到问题,主要取决于动态变化的$detailed_search_query变量。

我需要进行以下工作,并正确添加 COUNT() ,因此新行总数将包含unique_id's 的总数。

当前 SQL:

$sql = $db->prepare( "
              SELECT
                individuals.individual_id,
                individuals.unique_id,
                individuals.fullname,
                individuals.day_of_birth,
                TIMESTAMPDIFF(YEAR,individuals.day_of_birth,CURDATE()) AS age,
                individuals.gender,
                individuals.record_timestamp,
                individuals.active,
                individuals.deleted,
                individuals_dynamics.weight,
                individuals_dynamics.degree,
                individuals_dynamics.trainer_name
              FROM
                individuals as individuals
              LEFT JOIN
                individuals_dynamics AS individuals_dynamics ON individuals.unique_id = individuals_dynamics.individual_id
              WHERE
                $detailed_search_query $display recognized = 'yes' 
              GROUP BY
                individuals.record_timestamp
              ORDER BY $by $how
              LIMIT " . $limit);

如果我将 COUNT() 添加到它,我有 PDO 错误说Fatal error: Call to a member function execute() on a non-object

这就是我的新查询(刚刚开始,其余部分相同)的样子,它返回上面的错误:

$sql = $db->prepare( "
                  SELECT
                    COUNT(individuals.unique_id),
                    individuals.individual_id,
                    individuals.unique_id,
                    individuals.fullname,
                    individuals.day_of_birth,

我在这里想念什么?

编辑1:

我如何使用 COUNT() 的示例会生成有效的普通预查询:

 $sql              = $db->prepare("SELECT count(unique_id) FROM individuals");
 $sql->execute();
 $total            = $sql->fetchColumn();
 $pagination       = new Pagination($paginate_number);
 $limit            = $pagination->getLimit($total);

编辑2:

是的,对,当我添加别名时返回相同的错误,例如:

$sql = $db->prepare( "
                  SELECT
                    COUNT(individuals.unique_id) as total,
                    individuals.individual_id,

编辑 3:

这是我对最后一次编辑的不好,如果你添加别名,比如总计,那么查询工作但它只计算当前行并返回 1,但我需要总行数,例如:

Array
(
    [0] => Array
        (
            [total] => 1
            [0] => 1
            [individual_id] => 51
            [1] => 51
            [unique_id] => f598edae
            [2] => f598edae

编辑4:

当 PHP 变量被替换时,我在 WHERE 子句中有类似的内容:

                  WHERE
                    individuals.fullname LIKE '%adam%' AND individuals_dynamics.degree BETWEEN '1' AND '3' AND EXTRACT(YEAR FROM (FROM_DAYS(DATEDIFF(NOW(),individuals.day_of_birth))))+0 BETWEEN '7' AND '10' AND individuals_dynamics.weight BETWEEN  '20' AND '40' AND individuals_dynamics.degree BETWEEN '7' AND '10' AND deleted != 'yes' AND active != 'no' AND recognized = 'yes' 
                  GROUP BY
                    individuals.record_timestamp

编辑 5:

期望的结果是在最终数组中包含键总数,这将表示基于动态 PHP 变量在当前查询中提取的结果总量,例如$detailed_search_query$display

现在我总有 1 个。什么时候应该是 75:

Array
(
    [0] => Array
        (
            [total] => 1
            [0] => 1
            [individual_id] => 71
            [1] => 71
            [unique_id] => f598e2ae
            [2] => f598e2ae
            [fullname] => Name2 Name2 Name2
        )

    [1] => Array
        (
            [total] => 1
            [0] => 1
            [individual_id] => 65
            [1] => 65
            [unique_id] => b76497ca
            [2] => b76497ca

        )
4

1 回答 1

4

您收到的错误意味着 PDO 无法准备查询,原因是您的 SQL 查询中有错误,数据库服务器无法执行它......所以为了更好地理解您应该发布的问题您尝试直接在 mysql 客户端上执行查询的错误。

individual_id要获得您需要的结果集,您可以插入一个子查询来计算与外部查询相同的记录。

在查询的第一部分之后:

SELECT 
(SELECT COUNT(unique_id) FROM individuals i2 WHERE i2.individual_id = individuals. individual_id) AS total,
individuals.individual_id,
individuals.unique_id,
individuals.fullname,
individuals.day_of_birth,

请记住,要从子查询中正确引用外部查询的列,您应该使用两个不同的别名,即使您在两个查询(外部和子)中都从同一个表中进行选择。

于 2013-08-25T09:15:48.253 回答