簡體   English   中英

一個查詢中的MySQL SELECT,LEFT JOIN和COUNT()返回錯誤

[英]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,

我在這里想念什么?

編輯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

        )

您收到的錯誤意味着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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM