 <p>Unfortunately, this seems to be a task, where you cannot get away using separate queries. However, I would use <code>union</code> to combine the results of the queries, rather than joins, or subqueries in the select list, or separate queries.</p> <ol> <li>With union there is only 1 roundtrip between the client and the database</li> <li>If a query in the union does not return any rows, then it will not be in the resultset (see requirements in OP). Pls note, that the <code>type</code> field's value will tell you the type of the url returned.</li> </ol> <p>Sample code:</p> <pre><code>SELECT article_url, 'review' as type FROM articles WHERE articles_game_id = 233 AND artikel_sort = 'review' AND article_online = 1 ORDER BY article_datetime DESC LIMIT 1 UNION ALL SELECT article_url, 'preview' FROM articles WHERE articles_game_id = 233 AND artikel_sort = 'preview' AND article_online = 1 ORDER BY article_datetime DESC LIMIT 1 UNION ALL SELECT trailer_url, 'video review' FROM trailers WHERE trailer_game_id = 233 AND trailer_sort = 'video review' AND trailer_online = 1 ORDER BY trailer_datetime DESC LIMIT 1 UNION ALL SELECT trailer_url, 'video preview' FROM trailers WHERE trailer_game_id = 233 AND trailer_sort = 'video preview' AND trailer_online = 1 ORDER BY trailer_datetime DESC LIMIT 1 </code></pre> <p>An alternative solution could be to use a subquery to get the max date (or id, if the article / trailer ids are auto_increment fields). However, you would need 2 subqueries (1 or article, 1 trailers), then 2 queries in which the subqueries are joined back to article / trailer tables, and a 5th one top combine them into 1 query, so I will not describe this approach.</p>