У меня есть столбец «доступно», который либо возвращает «да», либо, например, «30 минут». Чтобы отсортировать эту таблицу, мы обнаружили, что это работает так, как предполагалось, где «Да» на первом месте, а «30 минут» - после.
order by available + 0 asc
Несмотря на то, что это работает, мы не знаем, почему мы должны поставить +0 в столбец. Может кто-то уточнить?Использование +0 в порядке заказа
Редактировать: Это пример по запросу
Обратите внимание, что все где предложения здесь не указаны, а if (x is null) - это что-то возвращать, если нет результата aka null value.
select distinct r.rname, if(b.stime is null, 'Yes', 'Yes') as available, r.mperson
from Rooms r left outer join Bookings b using (rname)
union all
select b.rname, concat(minute(timediff(b.etime, '$sdate')), ' min') as available, r.mperson
from Bookings b inner join Rooms r using(rname)
order by available + 0 asc, rname asc
Можете ли вы предоставить структуру таблицы и простейший запрос, который вы используете, что демонстрирует проблему? В противном случае все просто догадывается. – Ben
Это относится к столбцу как числовому. Не знаю, как это относится к «Да» и «30 минут», но я не стал бы полагаться на это поведение. Попробуйте преобразовать более явно. – Thilo
«да» и «30 мин» не подходят друг другу ... интегральная колонка с «0» и «30» была бы лучше (и, вероятно, в миллион раз быстрее обрабатывать) – Alex