Я не могу придумать ни одного вменяемого решения этой проблемы, не прибегая к смешным комбинациям пользовательских функций. Может быть, вы можете дать некоторые свежие мысли по этому поводу.
У меня есть следующий (упрощенный) массив
Array
(
[0] => Array
(
[vid_id] => 420037
[vid_rating] => 2.93827
[vid_quality] => 2
[vid_special] => 1
[vid_weight] => 0
[vid_position] => 0
[vid_position_end] => 0
)
[1] => Array
(
[vid_id] => 420040
[vid_rating] => 3
[vid_quality] => 1
[vid_special] => 1
[vid_weight] => 0
[vid_position] => 0
[vid_position_end] => 0
)
[2] => Array
(
[vid_id] => 426455
[vid_rating] => 3.25581
[vid_quality] => 2
[vid_special] => 0
[vid_weight] => 5
[vid_position] => 1
[vid_position_end] => 2
)
[3] => Array
(
[vid_id] => 429804
[vid_rating] => 3
[vid_quality] => 2
[vid_special] => 0
[vid_weight] => 0
[vid_position] => 0
[vid_position_end] => 0
)
[4] => Array
(
[vid_id] => 420848
[vid_rating] => 2.94444
[vid_quality] => 2
[vid_special] => 0
[vid_weight] => 3
[vid_position] => 1
[vid_position_end] => 2
)
[5] => Array
(
[vid_id] => 420859
[vid_rating] => 2.73077
[vid_quality] => 2
[vid_special] => 0
[vid_weight] => 4
[vid_position] => 1
[vid_position_end] => 2
)
[6] => Array
(
[vid_id] => 420524
[vid_rating] => 2.41379
[vid_quality] => 2
[vid_special] => 0
[vid_weight] => 5
[vid_position] => 2
[vid_position_end] => 2
)
[7] => Array
(
[vid_id] => 419810
[vid_rating] => 3.13393
[vid_quality] => 1
[vid_special] => 0
[vid_weight] => 0
[vid_position] => 0
[vid_position_end] => 0
)
[8] => Array
(
[vid_id] => 419851
[vid_rating] => 2.97802
[vid_quality] => 1
[vid_special] => 0
[vid_weight] => 5
[vid_position] => 1
[vid_position_end] => 2
)
[9] => Array
(
[vid_id] => 419843
[vid_rating] => 2.95349
[vid_quality] => 1
[vid_special] => 0
[vid_weight] => 3
[vid_position] => 1
[vid_position_end] => 2
)
[10] => Array
(
[vid_id] => 419838
[vid_rating] => 2.73529
[vid_quality] => 1
[vid_special] => 0
[vid_weight] => 4
[vid_position] => 1
[vid_position_end] => 2
)
)
Этот массив является результатом этого запроса MySQL
SELECT
vid_id,
vid_rating,
vid_quality,
vid_special,
vid_weight,
vid_position,
vid_position_end
FROM versions
WHERE vid_movid = 'xxxxx' AND vid_status = 1
ORDER BY vid_special DESC, vid_quality DESC, vid_rating DESC
В результате выводится список ссылок на веб-сайты (для простоты фактически удален столбец ссылок), которые необходимо разместить в очень конкретном порядке. Делать то, что мне нужно, можно с несколькими запросами UNIONed ... но я действительно не хочу прибегать к этому, поскольку стоимость будет очень высокой, поэтому я решил, что манипулировать массивами будет проще.
Мне нужно выборочно извлечь несколько ссылок из этого массива и поместить их поверх массива в определенном порядке.
Ссылки, отмеченные vid_position, и
vid_position_end обозначает диапазон, который
эта группа будет занимать. Означающий, что
если помечено несколько ссылок
с этими позициями только 2 будут
толкнул к вершине, если диапазон
1-2. если его 1-3, то топ 3
должности будут заняты.
Вес обозначает ЗАКАЗ, в котором
ссылки должны быть отсортированы. Так что если есть
5 разных ссылок, с 5 разными
гири в диапазоне позиций 1-2,
толкаются только 2 верхних веса
наверх Остальные 3 будут
оставайся там, где они есть.
Существуют разные группы ссылок.
В этом случае есть группа 1-2,
и 3-3. Первая группа занимает
первые 2 позиции, и в моем примере
имеет 3 весовых категории. другая группа
занимает 3-е место, и только
имеет 1 весовую категорию.
Заказ должен быть независимым.
Если в 1-2 нет ссылок
группа, но есть ссылки в 3-3,
это означает, что 3-3 сгруппированные ссылки будут
появляются в первой позиции.