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

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

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

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема MySQL vapros  
Автор toranaga (непознат)
Публикувано07.08.02 11:07



imam tablica sas, grubo kazano, slednata stuktura:
id
caption
parent
.... i drugi, koito ne sa ot znachenie
iskam da izkaram vsichki elementi, vkliuchitelno s tehnite podchineni, ako imat takiva... ama neshto ne moga da go dokaram... kato ia left joina sas sebe si na miastoto na tezi elementi, koito niamat podchineni, poluchavam redove samo s Null. Neshto mai gresha pri query-to, no ne moga da zagreia kude...



Тема Re: MySQL vaprosнови [re: toranaga]  
Автор salle (Един такъв)
Публикувано07.08.02 11:32



Дай заявката :)

Естествено е да получаваш NULL щото то точно това му е целта на LEFT JOIN

Ако обаче искаш да изкараш йерархично всички подчинени надолу няма да стане освен ако нямаш фиксиран брой нива на йерархията. Щото при неограничен брой ти трябва рекурсия (това всъщност е дървовидна структура) а рекурсията и SQL са малко скарани меко казано.

На всичко отгоре е важно какво всъщност ти е отношението.

Едно към Едно
Едно къв Много
Много към Едно
Много към Много

Трабва внимателно дефинираш точно една от тези зависимости и да се погрижиш данните да не я нарушават за да могат заявките да разчитат на нея.



Тема Re: допълнениенови [re: salle]  
Автор salle (Един такъв)
Публикувано07.08.02 11:38



при такава таблица

id, parent

е много по-лесно да направиш справка за "родителите на даден ID" отколкото за "децата на даден родител"

Иначе казано за второто по-добра работа ти върши таблица

id, child

т.е. обратен указател.

Забележи, че ако връзката ти е едно към едно т.е. един родител има само едно дете и едно дете има само един родител най-добра работа ще ти свърши "претрупана" таблица:

id, parent, child

А пък ако ще си говорим за хора и генеалогично дърво там естествената структура е:

id, mother, father

и така нататък



Тема Re: MySQL vaprosнови [re: salle]  
Автор toranaga (непознат)
Публикувано07.08.02 11:50



Ха, мерси за отговора. Точно на теб се надявах :)
Значи... моя случай е по-простичък...
искам да извадя инфо само за две нива
връзката ми е едно към много - всеки елемент има само един родител
заявката ми е следната:
select * from navmain n1
left join navmain n2 on n1.id=n2.parent
там където няма с какво да се "left join-e " получавам Null за ВСИЧКИ полета от резултата - е това не разбирам - не трявба ли да получа parentite, а там където няма поделементи да има Null до тях?



Тема Re: MySQL vaprosнови [re: toranaga]  
Автор salle (Един такъв)
Публикувано07.08.02 13:39



за ВСИЧКИ полета от резултата ??

т.е. Цял ред с NULL ??



Тема Re: MySQL vaprosнови [re: salle]  
Автор toranaga (непознат)
Публикувано07.08.02 13:40



imenno! tova me porazi i mi razbi predstavite za left join
neshto poveche -
ako smenia select * sas select n1.* - vsichko izliza - e, ne vizhdam podelementite
ako iskam select n1.*,n2.caption - togava caption mi stava null kudeto i caption na podelementa e Null



Тема Re: MySQL vaprosнови [re: toranaga]  
Автор salle (Един такъв)
Публикувано07.08.02 13:50



Ама естествено !!

Всички колонки от "дясната" таблица стават NULL

Нали точно това е целта на LEFT JOIN

И точно затова ако искаш само редовете за които няма Child можеш да напишеш:

select n1.* from n1 from navmain n1
left join navmain n2 on n1.id=n2.parent WHERE n2.parent IS NULL;

с други думи можеш във WHERE клаузата да проверяваш за NULL която и да е колонка

Иначе казано това е учебникарския пример защо не ти трябва sub-query за:

select .... from tbl1 where ID NOT IN (select ID from tbl2);

<P ID=&quot;edit&quot;><FONT class=&quot;small&quot;><EM>Редактирано от salle на 07.08.02 13:53.</em></font></p>

Редактирано от salle на 07.08.02 13:54.



Тема Re: MySQL vaprosнови [re: salle]  
Автор toranaga (непознат)
Публикувано07.08.02 14:12



От "дясната" естествено, че стават Null.
Ама не разбирам защо колонките И В ЛЯВАТА стават Null!!! Когато left join-vam ралични таблици и в дясната нямам съответствие от ляво са си записите, а отдясно става Null, ОК!
Но в моя случай не се получава така!
Целта ми е да изкарам ЕДНОВРЕМЕННО тези които имат и тези които нямат поделементи. Има ли начин за това?



Тема Re: MySQL vaprosнови [re: salle]  
Автор toranaga (непознат)
Публикувано07.08.02 14:19



Хааа, по дяволите, открих го - някакъв бъг ще да е - като качих същата таблица със същата заявка под Linux сървъра, проблема изчезна - Null има само "отдясно", както и би трябвало.....
MySQL-a ми е 3.23.46-nt под NT4 SP6a - ще ъпгрейдна и ще кажа какво е станало.
Sorry за недоразумението и благодаря много за помощта!



Тема Re: MySQL vaprosнови [re: toranaga]  
Автор salle (Един такъв)
Публикувано07.08.02 14:54



Това не го бях чувал досега. Пробвай с 3.23.51 и ако пак се появява ми се обади.

Преди това обаче си запази оригиналните таблици и пробвай myisamchk или REPAIR TABLE

Подобни ефекти се получават понякога при повредени инедкси.




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


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

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