Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 18:26 11.05.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Помощ за sql заявканови  
Автор todor68O8 (непознат )
Публикувано28.07.09 12:57



Ако може малко помощ за следната SQL заявка.

Имам таблица под MySQL - 5.0.32-Debian_7etch10-log

CREATE TABLE `classes` (
`id` int(4) NOT NULL auto_increment,
`id_name` varchar(20) NOT NULL,
`parent_name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=184 ;

id_name | parent_name
-------------------------------
1:1 | 0
1:32 | 1:1
1:33 | 1:1
1:34 | 1:32
1:35 | 1:32
1:36 | 1:33
1:37 | 1:34
1:39 | 1:1
1:40 | 1:1
...
</pre></font>

Ta каква заявка да направя че таблицата да ми излиза в този вид

id_name | parent_name
-------------------------------
1:1 | 0
1:32 | 1:1
1:34 | 1:32
1:35 | 1:32
1:37 | 1:34
1:33 | 1:1
1:36 | 1:33
1:39 | 1:1
1:40 | 1:1
....
т.е. да се сортира първо колона id_name, и след това всички parent_name които са равни на придишното id_name

Редактирано от todor68O8 на 28.07.09 14:06.



Тема Re: Помощ за sql заявканови [re: todor68O8]  
Автор todor68O8 (непознат )
Публикувано28.07.09 15:40



Май ще е нещо такова

SELECT *
FROM classes
WHERE parent_name = any(SELECT id_name FROM classes)

Редактирано от todor68O8 на 28.07.09 15:41.



Тема Re: Помощ за sql заявканови [re: todor68O8]  
Автор wqw (АзСъмЖив)
Публикувано28.07.09 21:02



Ако MySQL поддържа Common Table Extensions ще стане относително лесно. Иначе за тази йерархия трябва цикъл някой да върти -- клиентския код или със SQL.

cheers,
</wqw>



Тема Re: Помощ за sql заявканови [re: todor68O8]  
Автор salle (един такъв)
Публикувано29.07.09 18:11



Межу другото идеята да съхраняваш стойности като x:y не е никак добра поради много причини.

Ако това са истинските данни частта "1:" е напълно излишна. Ако не са то тогава разбий въпросната двойка x:y на две колонки.



Тема Re: Помощ за sql заявканови [re: todor68O8]  
Автор salle (един такъв)
Публикувано29.07.09 18:16



Дефинирай "равни на предишното id_name" и ще се сетиш как става. Не забравяй обаче, че ти трябва ORDER BY клауза. Без нея сървърът е свободен да ти върне резултата в произволен ред.



Тема Re: Помощ за sql заявканови [re: salle]  
Автор todor68O8 (непознат )
Публикувано01.08.09 15:16



Цялата задачата дойде от това че искам да направя web базиран интерфейс на tc-htb
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm

Там най-общо се работи с класове който имат свой родители и свой деца, най образно казано



И всеки клас може да има също свой под класове

Приемам че най добре е да има колона родител /да е наречем id), и колона дете(да е наречем id_parent)

и тука възникна въпроса с mysql заявките

Но мисля че донякъде се справиш:

SELECT PARENT.name AS 'Root-Class', CHILD.name AS 'Child-Class', CHILD.rate AS Rate, CHILD.ceil AS Ceil, CHILD.burst AS Burst, CHILD.prio AS Prio, CHILD.monitor AS Monitor
FROM classes AS PARENT, classes AS CHILD
WHERE PARENT.id = CHILD.id_parent
AND PARENT.id_interfaces =10

таблица: classes

CREATE TABLE `classes` (
`id` int(4) NOT NULL auto_increment,
`id_interfaces` int(3) NOT NULL,
`name` varchar(254) NOT NULL,
`leaf` varchar(3) NOT NULL default 'sfq',
`rate` varchar(20) NOT NULL,
`ceil` varchar(20) NOT NULL,
`burst` varchar(10) default NULL,
`prio` varchar(1) NOT NULL default '3',
`id_parent` int(4) NOT NULL,
`monitor` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=184 ;

id - e уникалния номер на класа
id_parent - е номера на родителя към който принадлежи

Другите колони са за различни стойности

Та въпроса е как да се сортира таблицата та да се наредят класовете подредени, с техните под класове.

И ако изтърка един клас как да се изтъркат всички негови под класове.

Абе опашата задача

Редактирано от todor68O8 на 01.08.09 15:21.



Тема Re: Помощ за sql заявканови [re: salle]  
Автор salle (един такъв)
Публикувано01.08.09 15:27



Да поясня. Като казваш "равни на предишното" не стават ясни много неща.

Преишното по какъв признак? Да речем, че говорим за поредица от числа. Има съществена разлика дали поредицате е непрекъстната.

Предишното на 5 например 4 ли е или "най-голямото число по-малко от 4"

Освен това от структурата на таблицата ти следва, че може да има повторения в поредицата т.е. да имаш 1,2,3,4,4,5. В този случай кое е "предишното на 5"? Ако става въпрос само за сортиране не е проблем разбира се да сортилаш двете четворки заедно.

И разбира се използвай INT

Ето един пример за дървовидна структура. Дефиницията на таблицата определя, че всеки елемент има само един "родител", но може да има много "наследници"

CREATE TABLE `class` (
`id` int(10) unsigned NOT NULL auto_increment,
`parent_id` int(10) unsigned default NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`)
);

INSERT INTO class (parent_id) VALUES (0), (1), (2), (3), (1);

До сортираме по id и parent_id поотделно:

SELECT * FROM class ORDER BY id;
+----+-----------+
| id | parent_id |
+----+-----------+
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 5 | 1 |
+----+-----------+

SELECT * FROM class ORDER BY parent_id;
+----+-----------+
| id | parent_id |
+----+-----------+
| 1 | 0 |
| 2 | 1 |
| 5 | 1 |
| 3 | 2 |
| 4 | 3 |
+----+-----------+

Кажи сега при този резултат как да дефинираме задачката.



Тема Re: Помощ за sql заявканови [re: todor68O8]  
Автор salle (един такъв)
Публикувано01.08.09 15:54



"Та въпроса е как да се сортира таблицата та да се наредят класовете подредени, с техните под класове. "

SELECT ... ORDER BY id, parent_id;

Редактирано от salle на 01.08.09 15:54.



Тема Re: Помощ за sql заявканови [re: salle]  
Автор salle (един такъв)
Публикувано01.08.09 15:55



така де, обратното parent_id, id :)



Тема Re: Помощ за sql заявканови [re: salle]  
Автор salle (един такъв)
Публикувано01.08.09 16:02



Ето го и примера за "подредени с техните подкласове"

SELECT c1.id parent, c2.id child FROM class c1 LEFT JOIN class c2 ON c1.id = c2.parent_id ORDER BY c1.id, c2.id;




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.