Я занят, пишущий приложение PHP, которое получает данные из базы данных, но я должен получить данные в определенном порядке.
Мой Запрос смотрит следующим образом
$sql = "select id,title,type from campaigns where id=$cid order by type";
Теперь моя проблема, это различные типы 'GC', 'MJ', 'MU', 'MS', 'MW', 'MX', 'GS', и я хочу, чтобы MX всегда был выбором в последний раз, таким образом должен всегда быть в конце строки. Так другие shpould во-первых быть выбранным и затем MX. Я надеюсь, что это имеет смысл.
Вы можете отсортировать так:
ORDER BY IF (type = 'MX', 1, 0), type
Сколько рядов вы выбираете с вашим запросом? Выглядит только один (я предполагаю, что идентификатор уникален ...) Так что порядок сортировки не имеет никакого эффекта.
Кроме того, порядок вашего сортировки должен делать то, что он должен делать, потому что в алфавитном порядке, MX будет последним в списке.
(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')
$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'";
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'
и запустить его как один запрос.
...
order by case when type = 'MX' then 1 else 0 end, type
будет портативным к другим базам данных (например, PostgreSQL)
Другие бросили 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");