Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что не так в запросе? ругается на строку с индексом 
:(
    Опции темы
zheka1980
Дата 27.9.2014, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.8.2014

Репутация: нет
Всего: нет



На сайте http://www.getinfo.ru/article610.html есть неплохая статья.
Начинаю делать все по инструкции. Создаю таблицу. Ругается на синтаксис
Код

CREATE my_tree (
id INT(10) NOT NULL AUTO_INCREMENT,
name VARCHAR(150) NOT NULL,
left_key INT(10) NOT NULL DEFAULT 0,
right_key INT(10) NOT NULL DEFAULT 0,
level INT(10) NOT NULL DEFAULT 0,
PRIMARY KEY id,
INDEX left_key (left_key, right_key, level) 
 ) 


Одну ошибку в первой строке (отсутствует слово table) я уже исправил. Тогда стало ругаться на 7 строку (PRIMARY KEY....)

Что не так?

Это сообщение отредактировал(а) zheka1980 - 27.9.2014, 12:48
PM MAIL   Вверх
Zloxa
Дата 27.9.2014, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(zheka1980 @  27.9.2014,  13:42 Найти цитируемый пост)
Что не так?

id скобочками обернуть
Код

PRIMARY KEY (id),

Цитата(zheka1980 @  27.9.2014,  13:42 Найти цитируемый пост)
есть неплохая статья.

в такие моменты лучше обратиться к документации от производителя
http://dev.mysql.com/doc/refman/5.1/en/create-table.html

Это сообщение отредактировал(а) Zloxa - 27.9.2014, 19:54


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
zheka1980
Дата 27.9.2014, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.8.2014

Репутация: нет
Всего: нет



Уже вручную сделал.

Реализовал все что в статье, осталась одна проблема
Код

SELECT id, MOD((right_key-left_key),2) AS ostatok FROM nested_catalog WHERE ostatok=0


mysql пишет, что нет такой колонки - ostatok

я с пониманием отношусь к его недоумеванию по этому поводу, но как правильно объяснить что такое ostatok?
PM MAIL   Вверх
Zloxa
Дата 27.9.2014, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



having вместо where


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
zheka1980
Дата 27.9.2014, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.8.2014

Репутация: нет
Всего: нет



Спасибо....
Осталось последнее
Код

SELECT t1.id, COUNT(t1.id) AS rep, MAX(t3.right_key) AS max_right FROM nested_catalog AS t1, nested_catalog AS t2, nested_catalog AS t3 WHERE t1.left_key<>t2.left_key AND t1.left_key<>t2.right_key AND t1.right_key<>t2.left_key AND t1.right_key<>t2.right_key GROUP BY t1.id HAVING max_right<>SQRT(4*rep+1)+1


Пояснения с сайта:

Цитата

//Ключи ВСЕГДА уникальны, вне зависимости от того правый он или левый;
    
    //Здесь, я думаю, потребуется некоторое пояснение запроса. Выборка по сути осуществляется из одной таблицы, но в разделе FROM эта таблица "виртуально" продублирована 3 раза: из первой мы выбираем все записи по порядку и начинаем сравнивать с записями второй таблицы (раздел WHERE) в результате мы получаем все записи неповторяющихся значений. Для того, что бы определить сколько раз запись не повторялась в таблице, производим группировку (раздел GROUP BY) и получаем число "не повторов" (COUNT(t1.id)). По условию, если все ключи уникальны, то число не повторов будет меньше на одну единицу чем общее количество записей. Для того, чтобы определить количество записей в таблице, берем максимальный правый ключ (MAX(t3.right_key)), так как его значение - двойное число записей, но так как в условии отбора для записи с максимальным правым ключом - максимальный правый ключ будет другим, вводится третья таблица, при этом число "неповторов" увеличивается умножением его на количество записей. SQRT(4*rep +1) - решение уравнения x^2 + x = rep. Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;



Здесь ошибок нет, но запрос выполнялся долго и прервался по таймауту. Есть мысли?

Это сообщение отредактировал(а) zheka1980 - 27.9.2014, 20:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.