Query returns no result
Usually it's better if you use EntityFieldQuery instead of db_select. See EntityFieldQuery vs Db_select()

From EntityFieldQuery use page:


  The EntityFieldQuery API lets you fetch information about entities
  (nodes, users, taxonomy terms et cetera) from Drupal without actually
  building SQL queries.
  EntityFieldQuery is a class that allows retrieval of a set of entities
  based on specified conditions. It allows finding of entities based on
  entity properties, field values, and other generic entity metadata.
  The syntax is really compact and easy to follow, as well. And, best of
  all, it's core Drupal; no additional modules are necessary to use it.


In your case:

$nodeQuery = new EntityFieldQuery();
$query = $nodeQuery-&gt;entityCondition('entity_type', 'node')
  // get only nodes that are 'published'
  -&gt;propertyCondition('status', 1) 
  // replace field_food_menu with field_TAXONOMY_NAME 
  // replace 2 with the taxonomy ID (tid) you're wanting
  -&gt;fieldCondition('YOUR_TAXONOMY_FIELD_NAME', 'tid', $SEARCHED_TID)
  // SOrt by creation date.
  -&gt;propertyOrderBy('changed', 'DESC')
  // Retrieve only last item.
  -&gt;range(0,1)
  // USe user 1 to query all nodes, not only those that current use can access.
  -&gt;addMetaData('account', user_load(1));


// Get a list of nids that match given criteria (because if the use of range() a list of 1 elem, at most.
$result = $query-&gt;execute();


(Code it's not tested, probably you have to tweak it a little).

I should add that this method also checks if user is allowd to access to the nodes that returns. That's the reason for the last line, it makes all nodes available, not just those the current user can access. If you want to see only nodes for that user just remove that line.