Diskuze: Komentare
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Můžeš zkusit "poddotazy", nebo použít JOIN na spojování tabulek. Konkrétněji ti ale těžko někdo poradí, když jsi neuvedl strukturu těch ostatních tabulek...
No, já bych ti mohla poradit řešení pro Microsoft SQL Server a ty by sis to mohl upravit na MySQL. (já jejich syntaxi neznám, tedy sql je stejné, ale je třeba použít kurzor a nějaký while cyklus...)
Tak tedy pro SQL server by to bylo třeba:
DECLARE @ParentID int
CREATE TABLE #Temp(parent_id int, potomek_id int)
-- Procházíme cyklem pro každý kořenový příspěvek
DECLARE Prispevky CURSOR FAST_FORWARD FOR
SELECT id
FROM dbo.Test
where parent_id is null
OPEN Prispevky
FETCH NEXT FROM Prispevky
INTO @ParentID
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @pocet int
SET @pocet = 0
INSERT INTO #Temp (parent_id, potomek_id)
SELECT @ParentID, id
FROM dbo.Test
WHERE parent_id = @ParentID
WHILE @pocet != (SELECT COUNT(*) FROM #Temp)
BEGIN
SET @pocet = (SELECT COUNT(*) FROM #Temp)
INSERT INTO #Temp (parent_id, potomek_id)
SELECT T1.parent_id, T1.id
FROM dbo.Test T1
INNER JOIN #Temp T
ON T.parent_id = T1.id
WHERE T1.parent_id is not null
EXCEPT
(SELECT * FROM #Temp T2)
END -- while @pocet
FETCH NEXT FROM Prispevky
INTO @ParentID
END -- Kurzor Ustavy
CLOSE Prispevky
DEALLOCATE Prispevky
-- Nakonec ještě vložíme samotné kořenové příspěvky
INSERT INTO #Temp (parent_id, potomek_id)
(SELECT id, NULL
FROM dbo.Test
where parent_id is null)
-- *** VÝSLEDEK ***
SELECT * FROM #Temp
DROP TABLE #Temp
Zobrazeno 3 zpráv z 3.