У меня есть таблица вроде этого:Laravel: MYSQL проверить, если ребенок принадлежит к началу родительского уровня с одним запросом
id | user | parent_id | level |
---------------------------------------------
1 | parent1 | 0 | 1
2 | parent2 | 0 | 1
3 | parent3 | 1 | 2
4 | child1 | 1 | 2
5 | child2 | 4 | 3
От Child2 Я хотел бы проверить, если он принадлежит к Parent1.
Очевидный ответ будет выполнить запрос из каждого уровня, начиная с Child2> Проверка родителя> проверки родителя> до тех пор, пока Parent1. Но для этого будет много запросов. Нравится:
while ($parent = \DB::table('users')->where('parent_id', $child->parent_id)->first()) {
if ($checkparent->id == $parent->id) break; // found the checked parent
else $child = $parent;
}
Есть ли способ запустить это только одним запросом? (Примечание: это будет более 2-х уровней)
parent1 <-- to here parent2
/ \
parent3 child1
\
child2 <-- from here
http://dba.stackexchange.com/questions/46393/get-top-most-parent-by-nth-child-id Невозможно выполнить с mysql. Tbh, это микрооптимизация. Поскольку вы уже используете laravel, несколько запросов в базу данных не должны вызывать большого беспокойства. Предполагая, что 'id' является первичным ключом, запросы должны быть быстрыми. –
@AlexBlex: как насчет 500 уровней? – user2002495
Затем пересмотреть модель данных или механизм хранения. Mysql не подходит для цели. –