Комплексные наборы результатов на основе шаблона в Mysql

У меня есть таблица с записями, привязанными к идентификаторам владельцев.

когда я получаю набор результатов, он может иметь несколько строк, принадлежащих одному владельцу.

Я хотел бы честно заказать свои результаты владельцам, показывая по 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?

0

Решение

Как то так будет работать ..

  1. Создать новый столбец с именем rank назначить ранг для каждой строки. Значением этого столбца будет ранг, сгруппированный по владельцу.
  2. Выберите нужные столбцы из выходной таблицы шага 1 и упорядочите их по рангу.

DEMO

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 с именем таблицы

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]