SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.08.2010 14:04:06

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Сортировка таблицы

Здравствуйте, есть таблица с полями elemID, parentID, leftKey

Мне нужно вывести данные в таком порядке
elemID = 1, parentID = 0, leftKey = 1
далее много елементов с ORDER BY `leftKey` ASC и с
elemID = 0, parentID = 1, leftKey = n

потом опять элемент с
elemID = 2, parentID = 0, leftKey = 1
потом много с ORDER BY `leftKey` ASC и с
elemID = 0, parentID = 2, leftKey = n

и так далее

как можно сделать такую выборку, заранее спасибо

Отредактированно vvsh (20.08.2010 14:07:27)

Неактивен

 

#2 20.08.2010 14:10:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Сортировка таблицы

Хорошего способа нет. Можно придумать, например, какой-то костылик.
ORDER BY (elemID * 1000000 + parentID * 1000000), elemID DESC, leftKey

Надо понимать, что он не будет использовать индекс.

Неактивен

 

#3 20.08.2010 14:23:44

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Re: Сортировка таблицы

Просто это древовидные комментарии с использованием Nested Sets. Сейчас у меня выбирается так

$a = mysql_query("SELECT * FROM `table` WHERE `parentID` = 0");

while($row = mysql_fetch_array($a)) {
    // Выводиться комментарий с parentID = 0

    $q = mysql_query("SELECT * FROM `table` WHERE `parentID` = ". $row['elemID']. " ORDER BY `leftKey`");

        while($rows = mysql_fetch_array($q)) {
            // выводятся комментарии с parentID = $row['elemID']
        }
}
 

вот я хотел бы избавиться от этих сложностей и сделать одним запросом.

Отредактированно vvsh (20.08.2010 14:32:22)

Неактивен

 

#4 20.08.2010 15:03:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Сортировка таблицы

Не-а. В nested sets используются понятия «левый» и «правый», а не «родитель» smile

При Вашей организации данных проще всего делать отдельную табличку «все дети»
и сортировать по ней.

Неактивен

 

#5 20.08.2010 16:25:20

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Re: Сортировка таблицы

У меня и есть левый и правый. просто есть комментарий - родитель, а у него много детей. это струкрута Nested Sets. Но так как у меня много родителей то мне нужно их разделять. поэтому ввел parentID и elemID.

Вот еще. возникает такая ошибка:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '– 2 WHERE `rightKey` > 3 AND `leftKey` < 2 AND `parentID` = 0' at line 1


вот SQL запрос:
UPDATE `table` SET `rightKey` = rightKey – 2 WHERE `rightKey` > 3 AND `leftKey` < 2 AND `parentID` = 0


В чем проблема?

Отредактированно vvsh (20.08.2010 16:26:54)

Неактивен

 

#6 20.08.2010 16:51:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Сортировка таблицы

Так сортируйте тогда по левому полю — и всё?

Проблема в том, что – ≠ - ≠ ­−.

Неактивен

 

#7 20.08.2010 17:05:17

vvsh
Завсегдатай
Зарегистрирован: 12.01.2008
Сообщений: 50

Re: Сортировка таблицы

Дело в том что левое поле может пересекаться у разных комментариев у которых parentID = 0. Поэтому так не получится.

Не заметил, спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson