Colbyd
Colbyd

Reputation: 371

Get MAX(value) from subquery results

I have a query that joins 3 tables and returns the results sorted by page number so I can view only one page at a time and its output through an array.

Here is my query

select wo.*,
   (select count(distinct order)
    from (SELECT *
          FROM `movements` LEFT JOIN
               `classes`
               ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN
               `clients`
               ON `movements`.`class_id` = `clients`.`class_id`
          WHERE `classes`.`class_id` = '$class_id' 
         ) wo2
    where wo2.order <= wo.order
   ) as pagenum
from (SELECT *
  FROM `movements` LEFT JOIN
       `classes`
        ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN
        `clients`
       ON `movements`.`class_id` = `clients`.`class_id`
   WHERE `classes`.`class_id` = '$class_id' 
  ) wo
order by pagenum

Now I want to be able to get the MAX(pagenum) so I can tell PHP when I have reached the end of the query. Is there a way to do something like this (I have tried but keep getting sql syntax errors)

SELECT MAX(`pagenum`) as `lastpage`

Or is there a better way to accomplish this?

Below is a screenshot of the results of this query. I currently have "next" and "previous" link that take the user from page to page when I reach the end of the query (page 5 in these results) I want to have PHP no longer give the option to go to next page. So I somehow have to get the value of the MAX(pagenum) of each query.

http://custommovement.com/help/woquery.png

Upvotes: 0

Views: 166

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1269933

You can get the maxpage num by including another correlated subquery:

select wo.*,
       (select count(distinct order)
        from (SELECT *
              FROM `movements` LEFT JOIN
                   `classes`
                   ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN
                   `clients`
                   ON `movements`.`class_id` = `clients`.`class_id`
                   WHERE `classes`.`class_id` = '$class_id'
             ) wo2
        where wo2.order <= wo.order
       ) as pagenum,
       (select count(distinct order)
        from (SELECT *
              FROM `movements` LEFT JOIN
                   `classes`
                   ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN
                   `clients`
                   ON `movements`.`class_id` = `clients`.`class_id`
                   WHERE `classes`.`class_id` = '$class_id'
             ) wo2
       ) as maxpages          
 from (SELECT *
       FROM `movements` LEFT JOIN
            `classes`
            ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN
            `clients`
            ON `movements`.`class_id` = `clients`.`class_id`
       WHERE `classes`.`class_id` = '$class_id'
      ) wo
order by pagenum 

Upvotes: 1

Related Questions