Получение данных в определенном порядке с помощью mySql

Я занят, пишущий приложение PHP, которое получает данные из базы данных, но я должен получить данные в определенном порядке.

Мой Запрос смотрит следующим образом

$sql = "select id,title,type from campaigns where id=$cid order by type";

Теперь моя проблема, это различные типы 'GC', 'MJ', 'MU', 'MS', 'MW', 'MX', 'GS', и я хочу, чтобы MX всегда был выбором в последний раз, таким образом должен всегда быть в конце строки. Так другие shpould во-первых быть выбранным и затем MX. Я надеюсь, что это имеет смысл.

5
задан Charles 24 December 2012 в 21:18
поделиться

7 ответов

Вы можете отсортировать так:

ORDER BY IF (type = 'MX', 1, 0), type
15
ответ дан 18 December 2019 в 10:44
поделиться

Сколько рядов вы выбираете с вашим запросом? Выглядит только один (я предполагаю, что идентификатор уникален ...) Так что порядок сортировки не имеет никакого эффекта.

Кроме того, порядок вашего сортировки должен делать то, что он должен делать, потому что в алфавитном порядке, MX будет последним в списке.

0
ответ дан 18 December 2019 в 10:44
поделиться
(select id,title,type from campaigns where id=$cid and type <> 'MX' order by type)
UNION
(select id,title,type from campaigns where id=$cid and type ='MX')
1
ответ дан 18 December 2019 в 10:44
поделиться
$sql = "select id,title,type from campaigns where id=$cid and type != 'MX' order by type 
union
select id,title,type from campaigns where id=$cid and type = 'MX'"; 
0
ответ дан 18 December 2019 в 10:44
поделиться

MobileOrg, однако, ограничен iPhone в настоящее время. Я с нетерпением слежу за разработкой аналогичного приложения для android .

-121--1278494-

Другие инициировали методы SQL. Поскольку вы также отметили это с помощью php, я также отмечу, что вы можете использовать функцию usort для определения пользовательской функции сравнения, которая будет использоваться алгоритмом сортировки.

 // returns 1 if lhs > rhs, returns 0 if lhs == rhs, returns -1 if lhs <rhs
 function customCompare($lhsRow, $rhsRow)
 {
     $lhsType = $lhsRow['type']
     $rhsType = $lhsRow['type']
     // special case code so that 'MX' is always > then anything (except for another MX)
     if ($lhsType == 'MX')
     {
          if ($rhsType == 'MX')
          {
               return 0;
          }
          else
          {
               return 1;
          }
     }

     // return 1 if lhs > rhs
     if ($lhsType > $rhsType)
     {
         return 1;
     }
     else if ($rhsType < $lhsType)
     {
         return -1;
     }
     else
     {
         return 0;
     }
 }

 $rows = /*perform query without ORDER*/
 usort($rows, "customCompare");
-121--4631796-

можно использовать UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type != 'MX'
ORDER BY type

UNION

SELECT id, title, type
FROM campaigns
WHERE id={$cid}
AND type == 'MX'

и запустить его как один запрос.

0
ответ дан 18 December 2019 в 10:44
поделиться
...
order by case when type = 'MX' then 1 else 0 end, type

будет портативным к другим базам данных (например, PostgreSQL)

0
ответ дан 18 December 2019 в 10:44
поделиться

Другие бросили SQL-методы. Так как вы также пометили это php, я также отмечу, что вы можете использовать функцию usort для определения пользовательской функции сравнения, которая будет использоваться алгоритмом сортировки.

 // returns 1 if lhs > rhs, returns 0 if lhs == rhs, returns -1 if lhs <rhs
 function customCompare($lhsRow, $rhsRow)
 {
     $lhsType = $lhsRow['type']
     $rhsType = $lhsRow['type']
     // special case code so that 'MX' is always > then anything (except for another MX)
     if ($lhsType == 'MX')
     {
          if ($rhsType == 'MX')
          {
               return 0;
          }
          else
          {
               return 1;
          }
     }

     // return 1 if lhs > rhs
     if ($lhsType > $rhsType)
     {
         return 1;
     }
     else if ($rhsType < $lhsType)
     {
         return -1;
     }
     else
     {
         return 0;
     }
 }

 $rows = /*perform query without ORDER*/
 usort($rows, "customCompare");
0
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: