Getting the "latest" related record from a SQL DB
Abigail
abigail at abigail.be
Mon Oct 13 18:33:19 BST 2014
On Sun, Oct 12, 2014 at 05:00:10PM +0100, Andrew Beverley wrote:
>
> What I failed to say was that as well as doing this for a single artist
> as per my question, I'd like to also be able to do it for several
> artists.
Ah, the perils of not asking what you want.
> Therefore (I think) I can't use either of those options without
> doing several database queries.
You can using a subselect:
SELECT Artist.*, Album1.name
FROM Artist, Album Album1
WHERE Artist.id = Album1.artist_id
AND Artist.id IN (... list of artist IDs ...)
AND Album1.release_date = (SELECT MAX(Album2.release_date)
FROM Album Album2
WHERE Album2.artist_id = Album1.artist_id);
This time, I actually tested the query.
> I also like to avoid sub-selects as
> MySQL has a tendency to optimise them badly (as Gareth said).
It's much better to measure the performance of the various queries on
your actual data than tossing some out of the window due to "tendencies".
> What I also failed to say was that I'm using DBIC and want to keep
> things database agnostic.
Then you shouldn't start with discarding queries because of possible
performance issues at a specific database.
Abigail
More information about the london.pm
mailing list