2

私はかなり単純なクエリで立ち往生しました!

簡単に言うと、検索 (フィルター) パネルを作成し、ページネーションを追加しています。

$detailed_search_query現在のクエリにある行数を返す際に問題があり、主に動的に変化する変数に依存しています。

COUNT() を適切に追加して、次の作業を行う必要があるため、新しい行の合計には の総数が含まれますunique_id

現在の 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