Tengo una representación en árbol en la tabla mysql basada en id
, depth
, parent_id
y path
. Cada registro raíz dentro de esta tabla tiene una profundidad de 0
, parent_id != null
y path
representación basada en el valor hexadecimal de la ID rellenada a la izquierda con 0
.cadena más corta dentro de la misma ruta (rama)
Cada elemento del árbol se construye mediante la especificación de depth = parent.depth + 1
, path = parent.path + hex(id)
, parent_id = parent.id
(pseudo código), por ejemplo:
id path depth parent_id assigned_user_id
------------------------------------------------------------
1 001 0 NULL NULL
2 002 0 NULL 1
3 001003 1 1 2
4 002004 1 2 1
5 001003005 2 3 2
6 001003005006 3 5 2
7 002004007 2 4 1
8 002004008 2 4 2
9 002004009 2 4 2
10 00200400800A 3 8 2
y así sucesivamente ... El problema es cómo conseguir los registros de usuario específico Identificación limitada a la ruta más corta en la misma rama. Por ejemplo, para assigned_user_id = 2
retrive:
id path depth parent_id assigned_user_id
------------------------------------------------------------
3 001003 1 1 2
8 002004008 2 4 2
9 002004009 2 4 2
En lugar de:
id path depth parent_id assigned_user_id
------------------------------------------------------------
3 001003 1 1 2
5 001003005 2 3 2
6 001003005006 3 5 2
8 002004008 2 4 2
9 002004009 2 4 2
10 00200400800A 3 8 2
No entiendo. Usted escribe que necesita la ruta más corta, pero en su salida deseada, hay múltiples registros con diferentes longitudes de ruta. Sea más claro sobre cuáles son sus criterios para seleccionar los registros. – Krab
@Krab El inicio de las rutas debe ser igual. Gracias por el comentario, actualizaré mi pregunta. – veritas
Básicamente, creo que entiendo la pregunta. Me gustaría que elabores sobre esta situación. Supongamos que los elementos definidos por las rutas '001003' y' 001003005006' se asignan al usuario '2', y' 001003005' se asigna al usuario '1'. ¿Sería correcto descartar '001003005006' simplemente con el argumento de que comienza con' 001003'? En otras palabras, ¿se debe tener en cuenta la adyacencia de los niveles (profundidades)? –