|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Я хочу понят у метя только одного такой глюк или у когото еще создайте таблицу с такими данными CREATE TABLE Personnel (ID INTEGER PRIMARY KEY, ParentID INTEGER,Data date, Info Char(10), Sell INTEGER,stat Char(1),deltastatus INTEGER, lft INTEGER NOT NULL, rgt INTEGER NOT NULL, Unlft INTEGER ,unrgt INTEGER ; INSERT INTO Personnel VALUES (1,0,’2003-05-27’, p1,3,'p', 2,1, 14,0,0); INSERT INTO Personnel VALUES (2, 1, ‘2003-05-27’, ‘p2’ ,2 ,’p’, 1 ,2 ,7, 0 ,0); INSERT INTO Personnel VALUES (3, 1, ‘2003-05-27’, p3 ,1, ‘p’, 1, 8 ,13, 0, 0); INSERT INTO Personnel VALUES (4, 2, ‘2003-05-27’, ‘p4’, 0, ‘p’, 1, 3, 4, 0, 0); INSERT INTO Personnel VALUES (5, 2, ‘2003-05-27’, ‘p5’, 0, ‘p’, 1, 5, 6, 0, 0); INSERT INTO Personnel VALUES (6, 1, ‘2003-05-27’, ‘p6’, 0, ‘p’, 1, 9, 10, 0, 0); INSERT INTO Personnel VALUES (7, 3, ‘2003-05-27’, ‘p7’, 0, ‘p’, 1, 11, 12, 0, 0); ввобщем должна получиться такая вот таблица. ID ParentID Data Info Sell stat deltastatus lft rgt Unlft unrgt 1 0 2003-05-27 p1 3 p 2 1 14 0 0 2 1 2003-05-27 p2 2 p 1 2 7 0 0 3 1 2003-05-27 p3 1 p 1 8 13 0 0 4 2 2003-05-27 p4 0 p 1 3 4 0 0 5 2 2003-05-27 p5 0 p 1 5 6 0 0 6 1 2003-05-27 p6 0 p 1 9 10 0 0 7 3 2003-05-27 p7 0 p 1 11 12 0 0 Далее попробуте сделать такой запрос. select x.ID, (select COUNT(P.ID) FROM personnel P WHERE P.lft BETWEEN x.lft AND x.rgt ) FROM personnel x "; __________________________________________ Что у вам в результате получилось...? результаты в ставьте в ответ.. Уменя получилось вот так ID (select COUNT(P.ID) FROM personnel P WHERE P.lft BETWEEN x.lft AND x.rgt ) 1 7 2 3 4 5 6 7 _________________________________________ Хотя по идеи должно быть так ID (select COUNT(P.ID) FROM personnel P WHERE P.lft BETWEEN x.lft AND x.rgt ) 1 7 2 3 3 3 4 1 5 1 6 1 7 1 ______________________________________ Я незна в чем тут глюк... помогите разобраться заране блогодарен за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2003, 05:58 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Попробуй проще сделать: select x.ID, count(p.ID) from personnel x, personnel p where p.lft between x.lft and x.rgt group by x.id Даже на mysql 3.x срабатывает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2003, 12:09 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
А зачем вложенный запрос? Код: plaintext 1.
И все. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2003, 12:20 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Большое спасибо за помошь... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2003, 19:37 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2003, 10:51 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Valerik Сделал несколько постов в форуме по одной и той же теме. Объяснил бы сначала с чем имеешь дело, а потом бы спрашивал в несколько пунктов. Вот тебе статья по твоим "деревьям", где расписаны основные идеи по работе с ними. Учи матчась! Деревья в SQL А по теме... Задача решается куда проще :) Код: plaintext 1. 2.
Этот запрос возвращает тот же результат и при этом выполняется быстрее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Фишка в том, что твое дерево и так построено на множественной модели деревьев, поэтому при подсчете числа вложенных вершин достаточно вычесть из правой границы левую, а затем если надо посчитать число: * только вложенных вершин, то вычесть из той суммы 1 и разделить на 2 * вложенных вершин с учетом данной, то прибавить к сумме 1 и разделить на 2 Итог. Зная хотя бы базовые понятия о правилах, по которым работает множественная модель деревьев, не надо будет городить огород. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 11:29 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Да я это все знаю просто вложенные запроссы внем обязательны там в дальнейшем идет сортировка еще по други пармерма. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2003, 19:22 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
А если не секрет, приведи пример. Может действительно можно сделать иначе, чем ты это сделал? :) Помни - в базах данных не бывает уникальных решений одной и той же задачи. Практически всегда можно привести несколько вариантов и из них уже выбирать лучший. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2003, 11:03 |
|
Для теж у кого mysql 4.1 помогите провести эксперемент
|
|||
---|---|---|---|
#18+
Там в в подчете левых правых еще учитываеться несколько парметров. так что просто отнимать значение лево право . это не годиться. так мы получим значение сколько всего левых и правых. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2003, 06:49 |
|
|
start [/forum/topic.php?fid=47&msg=32172672&tid=1855978]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 409ms |
0 / 0 |