1

I'm outputting the contents of a select menu from a model using this:

$select = $this->select();
$select->order('name');
return $this->fetchAll($select);

However, what i want to do is order by a specific value, and then by the name column. The SQL would look like this:

SELECT * FROM `names` ORDER BY `name` = 'SomeValue' DESC,`name`

SAMPLE SQL CODE:

CREATE TABLE IF NOT EXISTS `names` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

INSERT INTO `names` (`id`, `name`) VALUES
(1, 'rob'),
(2, 'dave'),
(3, 'andy'),
(4, 'paul'),
(5, 'jason'),
(6, 'john');

SELECT *
FROM `names`
ORDER BY `name` = 'john' DESC , `name`

RETURNS:

6   john
3   andy
2   dave
5   jason
4   paul
1   rob
9
  • and in what order does that (very weird) query return the entries? Commented Jan 29, 2010 at 15:24
  • $select->order("name = 'john' DESC , name"); does not work ? Commented Jan 29, 2010 at 15:26
  • @tharkun: john, andy, dave, jason, paul, rob find it kinda strange to.. Commented Jan 29, 2010 at 15:26
  • if this returns john first and then everybody else, then you really can't call this order by entry. it's much rather a take john out of the order, place him in the beginning and then order the rest by name. Commented Jan 29, 2010 at 15:27
  • didn't know something like that exists. interesting. Commented Jan 29, 2010 at 15:28

2 Answers 2

6

I believe this is what you are looking for:

$name = 'John';
$order = new Zend_Db_Expr($this->getAdapter()->quoteInto("name = ?", $name) ." DESC, `name`");
$select = $this->select();
$select->order($order);
return $this->fetchAll($select);
Sign up to request clarification or add additional context in comments.

Comments

0

depending on your SQL DB, this is not supported. (i dont know a database which can sort directly by a string.)

what would you want to accomplish ? have fields with someValue at the first positions

2 Comments

This is possible with MySQL as i use that query in an older system
possible by not throughing an error, but dont sort like i would expect. can you give us an example table with data and what sorting you want to achive ?

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.