У меня есть таблица с записями, привязанными к идентификаторам владельцев.
когда я получаю набор результатов, он может иметь несколько строк, принадлежащих одному владельцу.
Я хотел бы честно заказать свои результаты владельцам, показывая по 1 записи для каждого владельца, а затем повторяя этот процесс для своих следующих записей.
Я пытался использовать порядок по FIELD (‘owner’, {list, of, owners}), но он все еще группирует все записи вместе, показывая результаты всех одних владельцев перед другими.
Пример:
Record | Owner | value
1 | A | xyz
2 | A | xyz
3 | B | xyz
4 | C | xyz
5 | C | xyz
6 | B | xyz
Я хотел бы, чтобы этот набор результатов был в порядке
Record | Owner
1 | A
3 | B
4 | C
2 | A
6 | B
5 | C
Я использую Zend_Db_Table для своих запросов и не могу измениться. Поэтому, пожалуйста, код на основе PHP / Mysqli.
Порядок меняется, но всегда в шаблоне. У меня есть доступ к полному шаблону в любое время, говоря мне порядок идентификаторов владельцев.
Могу ли я достичь этого, не прибегая к использованию результирующего набора в PHP?
Как то так будет работать ..
rank
назначить ранг для каждой строки. Значением этого столбца будет ранг, сгруппированный по владельцу.SELECT report,owner FROM (
SELECT report,owner,value, IF(@prev <> owner, @cnt := 1, @cnt := @cnt + 1) AS rank, @prev := owner
FROM x, (SELECT @prev := null, @cnt := 0) vars
ORDER BY owner
) as y ORDER BY y.rank,y.owner;
ПРИМЕЧАНИЕ: заменить x
с именем таблицы
Других решений пока нет …