|
|
|
|
|
для: cheops
(20.03.2012 в 14:17)
| | если честно то я не понял вашу подсказку - декартово произведение что это значит?
========
я разобрался!
точнее мне немного помогли, но допер я сам))
сравнение каждой строки работает со всеми данными правой таблицы, где ID левой таблицы <= ID правой таблицы
просто я нигде не видел такого и смотрю на этот запрос как баран на новые ворота)) | |
|
|
|
|
|
|
|
для: prodigy
(20.03.2012 в 12:37)
| | >FROM tree AS node , tree AS parent
Это так называемое самообъединение, т.е. двухтабличный запрос, где в качестве обоих таблиц выступает tree, просто одной таблице присваивается псевдоним node, а другой tree
>GROUP BY node.id
Данные группируются по поле node.id, т.е. в результате будет не декартово произведение, а то же количество полей, что в таблице node, правда уменьшенное при помощи WHERE-условия
>WHERE node.left_key BETWEEN parent.left_key AND parent.right_key
При этом поле depth, даст количество записей именно по декартовому произведению
>(COUNT(parent.id) - 1) AS "depth"
Следующая строка просто выводит все поля таблицы node
>node.*
Сортировка ведется по полю left_key
>ORDER BY node.left_ke | |
|
|
|
|
|
|
| Объясните как работает этот запрос:
$sql = 'SELECT node.*, (COUNT(parent.id) - 1) AS "depth"
FROM tree AS node , tree AS parent
WHERE node.left_key BETWEEN parent.left_key AND parent.right_key
GROUP BY node.id
ORDER BY node.left_key';
|
Если можно ссылку на тему где объясняются подобные запросы.
Спасибо. | |
|
|
|
|