私はかなり単純なクエリで立ち往生しました!
簡単に言うと、検索 (フィルター) パネルを作成し、ページネーションを追加しています。
$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
)