MySQL vapros
19 отговора
449 прегледа
MySQL vapros
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...
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
Дай заявката :)
Естествено е да получаваш NULL щото то точно това му е целта на LEFT JOIN
Ако обаче искаш да изкараш йерархично всички подчинени надолу няма да стане освен ако нямаш фиксиран брой нива на йерархията. Щото при неограничен брой ти трябва рекурсия (това всъщност е дървовидна структура) а рекурсията и SQL са малко скарани меко казано.
На всичко отгоре е важно какво всъщност ти е отношението.
Едно към Едно
Едно къв Много
Много към Едно
Много към Много
Трабва внимателно дефинираш точно една от тези зависимости и да се погрижиш данните да не я нарушават за да могат заявките да разчитат на нея.
salle.online.bg/sig
Естествено е да получаваш NULL щото то точно това му е целта на LEFT JOIN
Ако обаче искаш да изкараш йерархично всички подчинени надолу няма да стане освен ако нямаш фиксиран брой нива на йерархията. Щото при неограничен брой ти трябва рекурсия (това всъщност е дървовидна структура) а рекурсията и SQL са малко скарани меко казано.
На всичко отгоре е важно какво всъщност ти е отношението.
Едно към Едно
Едно къв Много
Много към Едно
Много към Много
Трабва внимателно дефинираш точно една от тези зависимости и да се погрижиш данните да не я нарушават за да могат заявките да разчитат на нея.
salle.online.bg/sig
Re: допълнение
при такава таблица
id, parent
е много по-лесно да направиш справка за "родителите на даден ID" отколкото за "децата на даден родител"
Иначе казано за второто по-добра работа ти върши таблица
id, child
т.е. обратен указател.
Забележи, че ако връзката ти е едно към едно т.е. един родител има само едно дете и едно дете има само един родител най-добра работа ще ти свърши "претрупана" таблица:
id, parent, child
А пък ако ще си говорим за хора и генеалогично дърво там естествената структура е:
id, mother, father
и така нататък
salle.online.bg/sig
id, parent
е много по-лесно да направиш справка за "родителите на даден ID" отколкото за "децата на даден родител"
Иначе казано за второто по-добра работа ти върши таблица
id, child
т.е. обратен указател.
Забележи, че ако връзката ти е едно към едно т.е. един родител има само едно дете и едно дете има само един родител най-добра работа ще ти свърши "претрупана" таблица:
id, parent, child
А пък ако ще си говорим за хора и генеалогично дърво там естествената структура е:
id, mother, father
и така нататък
salle.online.bg/sig
Re: MySQL vapros
Ха, мерси за отговора. Точно на теб се надявах :)
Значи... моя случай е по-простичък...
искам да извадя инфо само за две нива
връзката ми е едно към много - всеки елемент има само един родител
заявката ми е следната:
select * from navmain n1
left join navmain n2 on n1.id=n2.parent
там където няма с какво да се "left join-e " получавам Null за ВСИЧКИ полета от резултата - е това не разбирам - не трявба ли да получа parentite, а там където няма поделементи да има Null до тях?
Значи... моя случай е по-простичък...
искам да извадя инфо само за две нива
връзката ми е едно към много - всеки елемент има само един родител
заявката ми е следната:
select * from navmain n1
left join navmain n2 on n1.id=n2.parent
там където няма с какво да се "left join-e " получавам Null за ВСИЧКИ полета от резултата - е това не разбирам - не трявба ли да получа parentite, а там където няма поделементи да има Null до тях?
Re: MySQL vapros
за ВСИЧКИ полета от резултата ??
т.е. Цял ред с NULL ??
salle.online.bg/sig
т.е. Цял ред с NULL ??
salle.online.bg/sig
Re: MySQL vapros
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
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
Ама естествено !!
Всички колонки от "дясната" таблица стават 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);
salle.online.bg/sig<P ID="edit"><FONT class="small"><EM>Редактирано от salle на 07.08.02 13:53.</em></font></p>
Всички колонки от "дясната" таблица стават 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);
salle.online.bg/sig<P ID="edit"><FONT class="small"><EM>Редактирано от salle на 07.08.02 13:53.</em></font></p>
Редактирано от salle на
Re: MySQL vapros
От "дясната" естествено, че стават Null.
Ама не разбирам защо колонките И В ЛЯВАТА стават Null!!! Когато left join-vam ралични таблици и в дясната нямам съответствие от ляво са си записите, а отдясно става Null, ОК!
Но в моя случай не се получава така!
Целта ми е да изкарам ЕДНОВРЕМЕННО тези които имат и тези които нямат поделементи. Има ли начин за това?
Ама не разбирам защо колонките И В ЛЯВАТА стават Null!!! Когато left join-vam ралични таблици и в дясната нямам съответствие от ляво са си записите, а отдясно става Null, ОК!
Но в моя случай не се получава така!
Целта ми е да изкарам ЕДНОВРЕМЕННО тези които имат и тези които нямат поделементи. Има ли начин за това?
Re: MySQL vapros
Хааа, по дяволите, открих го - някакъв бъг ще да е - като качих същата таблица със същата заявка под Linux сървъра, проблема изчезна - Null има само "отдясно", както и би трябвало.....
MySQL-a ми е 3.23.46-nt под NT4 SP6a - ще ъпгрейдна и ще кажа какво е станало.
Sorry за недоразумението и благодаря много за помощта!
MySQL-a ми е 3.23.46-nt под NT4 SP6a - ще ъпгрейдна и ще кажа какво е станало.
Sorry за недоразумението и благодаря много за помощта!
Re: MySQL vapros
Това не го бях чувал досега. Пробвай с 3.23.51 и ако пак се появява ми се обади.
Преди това обаче си запази оригиналните таблици и пробвай myisamchk или REPAIR TABLE
Подобни ефекти се получават понякога при повредени инедкси.
salle.online.bg/sig
Преди това обаче си запази оригиналните таблици и пробвай myisamchk или REPAIR TABLE
Подобни ефекти се получават понякога при повредени инедкси.
salle.online.bg/sig
Re: MySQL vapros
Уфффф, сложих по-висока версия - 3.23.51.... пак не става.... с други думи, под линукс е ОК, под NT - същата боза.
Проверявах и таблиците... никакъв ефект - пък и то имам 15 записа на кръст...
за всеки случах си напрвих аналогичен пример в друга таблица... същата работа....
Проверявах и таблиците... никакъв ефект - пък и то имам 15 записа на кръст...
за всеки случах си напрвих аналогичен пример в друга таблица... същата работа....
MYSQL-a e OK, imaite edno naum za PhpMyAdmin-a
okazva se che s mysql-a vsichko si e nared... problema e v phpmyadmin-a deto go polzvam.... toi izkarva Null, niamam predstava zashto... inache rezultata si e OK.
Re: MySQL vapros
сега остава да си изкопираш таблиците и на друг Win сървър и да повториш същия ефект...
Имам следното предложение:
1. Изкопирай таблиците във друга база данни само, че с mysqldump за да е сигурно, че няма нищо общо с файловете.
2. Пробвай същата заявка в новата база.
3. Ако ефектът продължава ми изпрати един email с dump-а на таблиците, заявката и резултата.
Ако не вече си си решил проблема
salle.online.bg/sig
Имам следното предложение:
1. Изкопирай таблиците във друга база данни само, че с mysqldump за да е сигурно, че няма нищо общо с файловете.
2. Пробвай същата заявка в новата база.
3. Ако ефектът продължава ми изпрати един email с dump-а на таблиците, заявката и резултата.
Ако не вече си си решил проблема
salle.online.bg/sig
Re: MySQL vapros
vsichko si e OK, pogledni dolnoto mnenie
И благодаря още веднъж за помощта!
И благодаря още веднъж за помощта!
Редактирано от toranaga на
Re: MySQL vapros
Abe kak taka stava LEFT JOIN na tablica sys samata sebe si, a3 mi triabvashe tova oba4e ne stava - naloji mi se da si napravia niakoi mi3erii na tablicite. T.e. triabvashe tam kydeto triabva da e NULL da slagam niakakvi bogus stojnosti koito da si syvpadat.
[линк]
[линк]
Re: MySQL vapros
mi eto ti query-to:
select * from navmain n1
left join navmain n2 on n1.id=n2.parent - vsichko si stava OK
Paradoksalnoto v sluchaia e che edna i sushta versia na phpmyadmin - 2.2.6 pokazva razlichni resultati pod windows NT i linux. Taka che ako si po Win, za vseki skuchai probvai deistvai s drugo GUI, da si suguren kakvo poluchavash...
Procheti cialata tema za podrobnosti
select * from navmain n1
left join navmain n2 on n1.id=n2.parent - vsichko si stava OK
Paradoksalnoto v sluchaia e che edna i sushta versia na phpmyadmin - 2.2.6 pokazva razlichni resultati pod windows NT i linux. Taka che ako si po Win, za vseki skuchai probvai deistvai s drugo GUI, da si suguren kakvo poluchavash...
Procheti cialata tema za podrobnosti
Re: MYSQL-a e OK, imaite edno naum za PhpMyAdmin-a
mi obarkva se, kato vzima rezultata ot mysql, i napravi fetch_row, stoinostite ot liavata tablitza zamestvat stoinostite ot diasnata, zashtoto sa sas sahtia key v asotziativnia masiv
vsichko shte e nared, ako kazez select n1.a as a1, ... n2.a as a2...
vsichko shte e nared, ako kazez select n1.a as a1, ... n2.a as a2...
Re: MYSQL-a e OK, imaite edno naum za PhpMyAdmin-a
hmmm, edva li shte dopusnat takava balamska greshka... puk i phpmyadmina se spravia dosta dobre v drugi sluchai kogato ima ednakvi assoc kliuchove. Strannoto e che sushtoto neshto pod unix raboti pravilno
Re: MYSQL-a e OK, imaite edno naum za PhpMyAdmin-a
mi ne znam, prosto mi hrumna che moze da se sluchva taka...