У меня есть MySql табличное представление моего дерева / матрицы, как это
idposition (int, AI)
iduser (int) // пользователь, которому принадлежит позиция
parentposition (int) // идентификатор родителя
ordering (tinyint) // от 1 до 3 для определения порядка ниже родительской позиции
status (tinyint) // от 0 до 3 для определения количества дочерних узлов
Мне нужно заполнить дерево сверху вниз, слева направо.
Узел может иметь максимум 3 дочерних.
В случае, если необходимо вставить новую позицию, эта позиция должна находиться под указанным пользователем на «более высоком» уровне возможностей в дереве.
Пользователь может иметь более одной позиции, поэтому мне нужно получить «более высокую доступную позицию ниже определенного пользователя».
Можете ли вы помочь мне сделать это в MySQL / PHP?
с тех пор как я здесь
$idmatrixposition=calculated and found the first position of the user.
$idparentposition=getAvailableMatrixPosition($idmatrixposition , $matrixtype);
function getAvailableMatrixPosition($matrixposition =NULL, $matrixtype)
{
global $link;
echo "<BR>gAMP:: $matrixposition<BR>";
if ($matrixposition == NULL ) {
echo "MATRIXPOSITION NULL";
return array();
}
$query = "select * from matrixpositions where idposition=$matrixposition";
$result=mysqli_query($link,$query);
$row = mysqli_fetch_assoc($result);
$total = $row['status'];
echo "<BR>MatrixPosition ID $matrixposition has $total positions below:: ". ($total >= 3 ? " FULL. " : " Available :)") ."<BR>";
if ($total < 3){
echo "<BR>OK: $matrixposition - $total";
return $matrixposition;
} else {
$query = "select * from matrixpositions where parentposition=$matrixposition order by ordering asc";
$result=mysqli_query($link,$query);
$i=0;
while ($row = mysqli_fetch_assoc($result)){
$i++;
if ($i==1) $firstchild=$row['idposition'];
$total = $row['status'];
$childmatrixposition=$row['idposition'];
if ($total < 3){
echo "<BR>OK Child: $childmatrixposition - $total - ".$row['ordering'];
return $childmatrixposition;
} else {
echo "<BR>KO Child: $childmatrixposition - $total - ".$row['ordering'];
}
}
if ($i==3) {
echo "<BR>KO FirstChild: $firstchild";
$position=getAvailableMatrixPosition($firstchild, $matrixtype);
return $position;
}
}
}
Работает только с одной позицией для пользователя.
Как я могу расширить его, чтобы найти лучшую позицию под несколькими позициями одного и того же пользователя?
Спасибо
Задача ещё не решена.
Других решений пока нет …