// тут нужно создать болванку для исходящего xml документа с помощью XMLWriter.
// перед входом в цикл нужно создать болванку списка юзеров
while ($reader->read()):
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'm:items'){
//........
$UserFields = [];
$AcceptedPosition = [];
while($data->read()){
switch ($data->name){
// ....................
}
}
// считали свойства юзера во входящем документе, тут нужно создать элемент юзера в исходящем и закинуть туда значения из $UserFields, $AcceptedPosition
}
// закончили читать список юзеров, нужно закрыть список юзеров в исходящем доке.
// закрыть исходящий док
// [...e.parentNode.children] -- преобразуем коллекцию узлов children в массив
let child_count = e.parentNode.children.length;
let child_arr = [];
for(let i = 0; i < child_count; i++)
child_arr.push(e.parentNode.children[i]);
// .filter((child) => child !== e) -- фильтруем детей, которые не относятся к текущему узлу
let filter_child_arr = [];
for(let i = 0; i < child_count; i++)
{
let curr_child = e.parentNode.children[i];
if(curr_child !== e)
filter_child_arr.push(curr_child);
}
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство = :входная_приоритетная_характеристика
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc,
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end
+ -- очки приоритетов складываем
case
when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end
+
-- ... и так далее все характеристики
desc, --
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from <таблица/соединенные таблицы для выборки товара> Tab1
where <условия фильтрации>
order by
case
when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc, -- эта более важная характеристика
case
when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
end desc, -- эта менее важная характеристика
-- ... и так далее все характеристики
<Другие условия сортировки (по дате добавления, имени и т.д.)>
select *
from verbs
order by darg-w
select *
from verbs
order by id
select *
from verbs
order by position -- дополнительное поле, в которое будете сами или программно вбивать порядок сортировки
select *
from verbs
order by case when id = 100 then 0 else 1 end -- даем записи id=100 наивысший приоритет, в любом состоянии списка она будет на 1 месте!
, id -- остальные записи отсортируются в порядке добавления