|
Страници по тази тема: 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="edit"><FONT class="small"><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 | >> (покажи всички)
|
|
|