You can do this by SQL trickery.
Normally you'd order your list by what's in the column itself:
SELECT col1, col2
FROM table
WHERE col1 = 'this'
ORDER BY col2 ASC;
You can also select 'fake' colums and in MySQL you can even order by those colums.
SELECT col1,
col2,
IF(col2='that', 1,0)
FROM table
WHERE col1='this';
Now the third column will contain 1 if col2 equals 'that', or zero in every other case.
Now you can order by this new column to get all the rows with col2='that' at the top.
You can nets the IF's so you can replace the zero with another if to get your other cases:
if (col2='that',1,if(col2='foo',2,if(col2='bar',3,4)))
Now col2 will be:
that 1
foo 2
bar 3
'the rest' 4
That way you can defy the normal alphabetical order.
If you are not using MySQL, you can do the same with several queries
and the UNION statement, something like this:
SELECT col1, col2, 1
FROM table
WHERE col1='this'
AND col2='that';
UNION
SELECT col1, col2, 2
FROM table
WHERE col1='this'
AND col2='foo';
UNION
SELECT col1, col2, 3
FROM table
WHERE col1='this'
AND col2='bar';
UNION
SELECT col1, col2, 4
FROM table
WHERE col1='this'
AND col2='php'
ORDER BY 3;