Try this:
order by (case when left(`{$table}`.`{$row}`, 1) between '0' and '9' then 0 else 1 end),
`{$table}`.`{$row}` + 0,
`{$table}`.`{$row}`
The first expression puts numbers first (or at least strings that start with a number). The second is a nice MySQL feature that simply converts a string to a number. The third sorts the non-numeric strings.
EDIT:
To have only numbers (instead of leading numbers) go first:
order by (case when left(`{$table}`.`{$row}`, 1) REGEXP '^-?[0-9]+$' then 0 else 1 end),
`{$table}`.`{$row}` + 0,
`{$table}`.`{$row}`