[英]MySQL SELECT, LEFT JOIN and COUNT() in one query returns error
我陷入了相當普通的查詢!
簡要地說,我已經創建了一個搜索(過濾器)面板,現在我在其中添加了分頁功能。
我在返回當前查詢中的行數時遇到問題,主要取決於動態更改$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,
我在這里想念什么?
我如何使用COUNT()的示例導致普通的預查詢有效:
$sql = $db->prepare("SELECT count(unique_id) FROM individuals");
$sql->execute();
$total = $sql->fetchColumn();
$pagination = new Pagination($paginate_number);
$limit = $pagination->getLimit($total);
是的,正確,當我添加別名時,會返回相同的錯誤,例如:
$sql = $db->prepare( "
SELECT
COUNT(individuals.unique_id) as total,
individuals.individual_id,
這對我的最后一次編輯不利,如果您添加別名(如總數),則查詢有效,但它僅對當前行進行計數並返回1,但我需要總行數,例如:
Array
(
[0] => Array
(
[total] => 1
[0] => 1
[individual_id] => 51
[1] => 51
[unique_id] => f598edae
[2] => f598edae
當替換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
期望的結果是在最終數組中包含鍵合計,該合計代表基於動態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
)
您收到的錯誤意味着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,
請記住,要從子查詢中正確引用外部查詢的列,即使您從兩個查詢(外部和子)的同一表中進行選擇,也應使用兩個不同的別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.