I want get max value in query MySQL without MAX() function because it's very slow. Ideally I want with LEFT JOIN
.
References :
https://dev.mysql.com/doc/mysql-tutorial-excerpt/5.7/en/example-maximum-column-group-row.html
INNER JOIN Results from Select Statement using Doctrine QueryBuilder
My Query MySQL :
SELECT
fs.id AS subject,
fpv.id AS post_version_id
FROM
forum_subject fs
INNER JOIN
forum_post_version fpv
ON fpv.forum_subject_id = fs.id
WHERE
fs.id IN (10817, 10818)
Results :
subject | post_version_id
10817 | 528385
10817 | 528386
10818 | 528387
10818 | 528388
I want to return only one line : the maximum post_version_id
.
Thank you for considering that my real case is much more complex :
- In my real case, this query is the continuation of other joins ;
- More line in each tables (> 50 000)
EDIT : Original query :
SELECT
f13_.id
FROM
forum_subject_version f14_
LEFT JOIN forum_subject_version f15_ ON (
f15_.forum_category_id = f14_.forum_category_id
AND f14_.forum_subject_id = f15_.forum_subject_id
AND f14_.id < f15_.id
)
INNER JOIN forum_subject f16_ ON f14_.forum_subject_id = f16_.id
INNER JOIN forum_post_version f17_ ON (f17_.forum_subject_id = f16_.id)
LEFT JOIN forum_post_version f18_ ON (
f18_.forum_subject_id = f16_.id
AND f17_.forum_post_id = f18_.forum_post_id
AND f17_.id < f18_.id
)
INNER JOIN forum_post f13_ ON f17_.forum_post_id = f13_.id
WHERE
f14_.forum_category_id IN (217, 218)
AND f15_.id IS NULL
AND f18_.id IS NULL
- f14_ => 2400 lines
- f15_ => 480 lines ↘ (LEFT JOIN FILTER)
- f16_ => 480 lines =
- f17_ => 24000 lines ↗
- f18_ => 4800 lines ↘ (LEFT JOIN FILTER)
- f13_ => 4800 lines =
- I want LEFT JOIN FILTER again for 2 lines
Return 4800 lines (2400 in #217 forum_category_id
, 2400 in #218 forum_category_id
), I want 2 lines, one per forum category (1 in #217 forum_category_id
, 1 in #218 forum_category_id
).
I can't use ORDER + LIMIT and I don't want this : MIN/MAX vs ORDER BY and LIMIT. MySQL recommand LEFT JOIN for filter but I can not do it in my situation after f13_ alias. :)