php & recursive select
5 отговора
218 прегледа
php & recursive select
някой да знае случайно може ли да се изпълни една рекурсивна заявка с php в mysql или postgresql
напр. :
имам таблица с рекурсивни отношения: в класическия пример работник-началник:
id name pid
1 иван 0
2 стоян 1
3 драган 1
4 антон 2
5 петкан 4
С една рекурсивна заявка искам да намеря всички подопечни на стоян напр. надолу по йерархията , в случая антон и петкан.
напр. :
имам таблица с рекурсивни отношения: в класическия пример работник-началник:
id name pid
1 иван 0
2 стоян 1
3 драган 1
4 антон 2
5 петкан 4
С една рекурсивна заявка искам да намеря всички подопечни на стоян напр. надолу по йерархията , в случая антон и петкан.
Re: php & recursive select
Ako govorish za po-golqma dylbochina ot 2 ne bih ti preporychal da puskash SQL za vseki rabotodatel zada mu namerish rabotnicite. Inache ne sym chuval za rekursivna zaqvka v SQL i ako nqkoi znae neshto takova moje da se obadi :).
az ti predlagam da gi obhojdash v shirina.
nai-dobre e kolkoto e vyzmojno po-malko zaqvki da pravish kym bazata. za celite na po-nantatyshna obrabotka moje da napulnish nqkakvi masivi i posle ako iskash tqh obhojdai rekursivno.
ideqta e che SQL poddyrja mnojestva - naprimer mojesh da pusnesh edin SQL:
select * from table where pid in (1,2,3,4);
i taka shte imash vsichki rabotnici na nqkolko nachalnika.
posle dokato gi obhojdash si generirash sledvashtoto mnojestvo napr. (5,6,7,8) i t.n.
taka shte imash tolkova zaqvki kolkoto ti e dylboko dyrvoto.
moje da ima i nedostatyci ama oshte ne sym imal problemi.
:))
aide ako mislish che shte ti svyrshi rabota moje i source da ti pratq.
mamma mia
az ti predlagam da gi obhojdash v shirina.
nai-dobre e kolkoto e vyzmojno po-malko zaqvki da pravish kym bazata. za celite na po-nantatyshna obrabotka moje da napulnish nqkakvi masivi i posle ako iskash tqh obhojdai rekursivno.
ideqta e che SQL poddyrja mnojestva - naprimer mojesh da pusnesh edin SQL:
select * from table where pid in (1,2,3,4);
i taka shte imash vsichki rabotnici na nqkolko nachalnika.
posle dokato gi obhojdash si generirash sledvashtoto mnojestvo napr. (5,6,7,8) i t.n.
taka shte imash tolkova zaqvki kolkoto ti e dylboko dyrvoto.
moje da ima i nedostatyci ama oshte ne sym imal problemi.
:))
aide ako mislish che shte ti svyrshi rabota moje i source da ti pratq.
mamma mia
ili
osven pid edno pole pid_path
1 ivan 0 path:
2 dragan 1 path 1
3 koljo 1 1
4 ivo 3 path : 3,1
5 gosho 4 path 4,3,1
...
taka shte mojesh da selektirash podopechnite na koljo na poveche ot 1 nivo na jerarhichnost.
1 ivan 0 path:
2 dragan 1 path 1
3 koljo 1 1
4 ivo 3 path : 3,1
5 gosho 4 path 4,3,1
...
taka shte mojesh da selektirash podopechnite na koljo na poveche ot 1 nivo na jerarhichnost.
Re: php & recursive select
v MySQL - niama ... MySQL e vazmojno nai-skapanata baza danni sashtestvuvala
niakoga. Napravo se uchudvam, che tolkova vreme ia polzvam. Za poveche info:
slashdot.org -> tarsi "Why Not MySQL?". Mnogo dobro dokumentche, koeto opisva
problemite s MySQL.
V PostgreSQL i drugi SVESTNI bazi danni, takova neshto se pravi sas "stored procedures" - neshto kato funkcii, koito se izpalniavat ot SQL-a - sam si gi pishesh s "CREATE STORED PROC" ili neshto ot toia rod. Posle si gi vikash samo po ime, a
SQL-at pravi vsichko ostanalo.
Ima i drugi nachini - otnovo s neshta, koito MySQL ne poddarja - kato subqueries - neshto, okazva se, mnogo polezno, koeto moje sashto da ti pomogne, t.e. da pravish neshto ot roda na SELECT name FROM users WHERE pid IN (SELECT id FROM users WHERE pid = 5); i niakakvi ei takiva ...
niakoga. Napravo se uchudvam, che tolkova vreme ia polzvam. Za poveche info:
slashdot.org -> tarsi "Why Not MySQL?". Mnogo dobro dokumentche, koeto opisva
problemite s MySQL.
V PostgreSQL i drugi SVESTNI bazi danni, takova neshto se pravi sas "stored procedures" - neshto kato funkcii, koito se izpalniavat ot SQL-a - sam si gi pishesh s "CREATE STORED PROC" ili neshto ot toia rod. Posle si gi vikash samo po ime, a
SQL-at pravi vsichko ostanalo.
Ima i drugi nachini - otnovo s neshta, koito MySQL ne poddarja - kato subqueries - neshto, okazva se, mnogo polezno, koeto moje sashto da ti pomogne, t.e. da pravish neshto ot roda na SELECT name FROM users WHERE pid IN (SELECT id FROM users WHERE pid = 5); i niakakvi ei takiva ...
Re: samo da vmetna
1. Като не ти харесва MySQL не го ползвай.
Като всеки софтуер си има предимства и недостатъци.
Нищо не е идеално в крайна сметка. Няма нищо лошо в това да кажеш "Еди-кое си е по-добро защото..."
Но да казваш "Това e най-скапаното...", което и да е "това" не му е тука мястото. Повечеотива на дискуссите от рода на За и Против Microsoft
2. Винаги ама при всеки удобен случай съм защитавал идеята, че subqueries или вложени заявки (термините са много) са нещо много полезно и много необходимо.
Само, че като всяко нещо в SQL и те не са универсално решение. А в много случаи са по-бавното (по тежко откъм ресурси) решение, когато заявката ти може да се изпълни с JOIN вместо със sub-select
По-конкретно - ти даваш адски неподходящ пример:
I. SELECT name FROM users WHERE pid IN (SELECT id FROM users WHERE pid = 5);
е еквивалентно на:
II. SELECT u1.name FROM users AS u1, users AS u2 WHERE u2.pid = 5 AND u1.pid = u2.id;
Опитай се да намериш SQL сървър, който ще изпълни заявка I. по-бързо от II.
Силно се съмнявам, че ще откриеш такъв.
3) От това, което пишеш за Stored Procedures личи, че никога не си ги изпалзвал.
"sam si gi pishesh s "CREATE STORED PROC" ili neshto ot toia rod."
Не мислиш ли, че не е коректно да се изказваш за неща, които не познаваш?
Linux is like a wigwam - No Windows, No Gates, Apache inside
Като всеки софтуер си има предимства и недостатъци.
Нищо не е идеално в крайна сметка. Няма нищо лошо в това да кажеш "Еди-кое си е по-добро защото..."
Но да казваш "Това e най-скапаното...", което и да е "това" не му е тука мястото. Повечеотива на дискуссите от рода на За и Против Microsoft
2. Винаги ама при всеки удобен случай съм защитавал идеята, че subqueries или вложени заявки (термините са много) са нещо много полезно и много необходимо.
Само, че като всяко нещо в SQL и те не са универсално решение. А в много случаи са по-бавното (по тежко откъм ресурси) решение, когато заявката ти може да се изпълни с JOIN вместо със sub-select
По-конкретно - ти даваш адски неподходящ пример:
I. SELECT name FROM users WHERE pid IN (SELECT id FROM users WHERE pid = 5);
е еквивалентно на:
II. SELECT u1.name FROM users AS u1, users AS u2 WHERE u2.pid = 5 AND u1.pid = u2.id;
Опитай се да намериш SQL сървър, който ще изпълни заявка I. по-бързо от II.
Силно се съмнявам, че ще откриеш такъв.
3) От това, което пишеш за Stored Procedures личи, че никога не си ги изпалзвал.
"sam si gi pishesh s "CREATE STORED PROC" ili neshto ot toia rod."
Не мислиш ли, че не е коректно да се изказваш за неща, които не познаваш?
Linux is like a wigwam - No Windows, No Gates, Apache inside
Re: samo da vmetna
1. Mdamm .. imam tova namerenie pri parva vazmojnost da kompiliram PostgreSQL sas Cygwin. Niamam i namerenie da go polzvam veche. Ne e idealno, no iziavlenia ot roda na "niama da napravim tova, shtoto potrebitelite mai ne se nujdaiat mnogo ot nego (pone ne tolkoz, che da ni platiat da go napravim)" zvuchat mnogo neseriozno, osobeno kato stava vapros za dobar ROLLBACK na zaiavkite.
2. Davam primer za subquery. Ne sam kazval, che ne moje da se zameni s druga zaiavka. Logichno e tvoiat select da e po-barz.
3. Ne sam gi polzval, zashtoto sam bachkal samo s MySQL. Vijdal sam gi obache v deistvie pri InterBase. Prosto beshe predi godina ... ne moga da pomnia vsiaka SQL zaiavka, koiato vida.
4. Da, mislia, che e nekorektno da govoria za neshta, koito ne razbiram, i ne smiatam che go pravia. Posochih edna dobra statia, koiato pokazva zashto MySQL ne triabva da se polzva za po-seriozni celi, osobeno kato znaesh, che, izdanish li se, si podsadim, nali ? Mnenieto mi protiv M$ si e moe mnenie i tova, ne se saobraziavai s nego, ako ne iskash.
2. Davam primer za subquery. Ne sam kazval, che ne moje da se zameni s druga zaiavka. Logichno e tvoiat select da e po-barz.
3. Ne sam gi polzval, zashtoto sam bachkal samo s MySQL. Vijdal sam gi obache v deistvie pri InterBase. Prosto beshe predi godina ... ne moga da pomnia vsiaka SQL zaiavka, koiato vida.
4. Da, mislia, che e nekorektno da govoria za neshta, koito ne razbiram, i ne smiatam che go pravia. Posochih edna dobra statia, koiato pokazva zashto MySQL ne triabva da se polzva za po-seriozni celi, osobeno kato znaesh, che, izdanish li se, si podsadim, nali ? Mnenieto mi protiv M$ si e moe mnenie i tova, ne se saobraziavai s nego, ako ne iskash.