I've not yet found the right way to use ->range($offset,$limit) in a dynamic query to skip first result, but without limiting the resultset (LIMIT clause).

The only workaround I've found is to use an high value for LIMIT, for example:


(see my comment in Drupal API documentation: https://api.drupal.org/comment/49938#comment-49938)

What's the right sintax?

  • In pure SQL there is an OFFSET 1 that would do the trick. Works both with MySQL and PostgreSQL at least in their recent versions. And that's what Drupal uses. To bad it does not test for existence of second parameter, just assume both are there. I encourage you to make it a feature request in core's issue queue.
    – Mołot
    Commented Jun 27, 2013 at 7:09

1 Answer 1


You could do something like this:

// Begin query build
$query = db_select('node');
$query->fields('node', array('nid', 'title'));
$query->condition('type', 'article');
$query->condition('uid', 1);

// Get total count for query
$count = $query->countQuery()->execute()->fetchField();

// Execute range query
$start = 1;
$query->range($start, ($count - $start));
$result = $query->execute();

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.