The results of a query can be ordered using the Select#orderBy method. In its simplest form, this variadic method can be passed multiple strings that correspond to fully-qualified columns names. Or, to change the order direction, objects can be supplied.
'use strict';
const MySQLDriver = require('node-data-mapper-mysql').MySQLDriver;
const driver = new MySQLDriver(require('../bikeShopConOpts.json'));
driver
.initialize()
.then(runQuery)
.then(printResult)
.catch(console.error)
.finally(() => driver.end());
function runQuery(dataContext) {
const query = dataContext
.from('staff s')
.select('s.staffID', 's.hasStoreKeys', 's.firstName')
.orderBy({column: 's.hasStoreKeys', dir: 'DESC'}, 's.firstName');
console.log('Query:');
console.log(query.toString(), '\n');
return query
.execute();
}
function printResult(result) {
console.log('Result:');
console.log(result);
}
Here's the generated query and execution result ($ node example/retrieve/order.js):
Query:
SELECT `s`.`staffID` AS `s.staffID`,
`s`.`hasStoreKeys` AS `s.hasStoreKeys`,
`s`.`firstName` AS `s.firstName`
FROM `staff` AS `s`
ORDER BY `s`.`hasStoreKeys` DESC, `s`.`firstName` ASC
Result:
{ staff:
[ { staffID: 4, hasStoreKeys: , firstName: 'Abe' },
{ staffID: 2, hasStoreKeys: , firstName: 'John' },
{ staffID: 5, hasStoreKeys: , firstName: 'Sal' },
{ staffID: 6, hasStoreKeys: , firstName: 'Valerie' },
{ staffID: 7, hasStoreKeys: , firstName: 'Kimberly' },
{ staffID: 8, hasStoreKeys: , firstName: 'Michael' },
{ staffID: 1, hasStoreKeys: , firstName: 'Randy' },
{ staffID: 3, hasStoreKeys: , firstName: 'Tina' } ] }