27. april 2005 - 21:41Der er
55 kommentarer og 1 løsning
En form for løkke der finder ting med "over"
Jeg har en database med et "id" (unikt) og et "over" felt (begge int). I forvejen har jeg en variabel med en værdig (f.eks. 5). Jeg vil derefter gerne have alle de rækker, der enten har "over" til 5. Eller de rækker, der har et id der er lig med id'et i en række med over=5. Og på den måde skal det køre. Ex:
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Slettet bruger
27. april 2005 - 21:48#1
Det er vel ca. det samme (præcis det samme?) som der er her på exp.dk hvis man f.eks. trykker på "databaser", finder den også alle kategorier indenfor både MySQL og Access osv.
Synes godt om
Slettet bruger
27. april 2005 - 21:59#2
Hvis det ikke kan lade sig gøre vil jeg også gerne have dette at vide, da jeg jo så bliver nødt til at finde på noget andet.. Men jeg regner da med at det kan lade sig gøre da "systemet" findes her på sitet.
Det er nok nemmere for Eksperten da strukturen er rimelig fast.
Synes godt om
Slettet bruger
27. april 2005 - 22:04#5
Forstår ikke helt dit eksempel med ny struktur. Det kan sagtens lade sig gøre med den nye struktur, da jeg ikke er begyndt at "udfylde" mit system endnu :o)
Synes godt om
Slettet bruger
27. april 2005 - 22:05#6
Forstår godt dit system, skulle bare lige tænke mig om. Du vil i stedet for at lave en "over", have mig til at lave en "under", ikke?
Jeg forsøger i morgen, så ser vi hvor godt det går :o)
Synes godt om
Slettet bruger
28. april 2005 - 19:43#20
Lige for at vende lidt tilbage. Kan man ikke joine den samme tabel igen, hvis man kalder den første ved et alias e.l., (Jeg regner ikke med at der bliver flere end 3 lag)
SELECT - - FROM tabel1 as 1 INNER JOIN tabel1 as 2 ON 2.id = 1.id WHERE 1.over=4
(SELECT t1.* FROM tabel t1 WHERE t1.id=X) UNION (SELECT t1.* FROM tabel t1,tabel t2 WHERE t1.over=t2.id AND t2.id=X) UNION (SELECT t1.* FROM tabel t1,tabel t2,tabel t3 WHERE t1.over=t2.id AND t2.over=t3.id AND t3.id=X)
Synes godt om
Slettet bruger
28. april 2005 - 20:00#22
Der er ikke angivet et max, men der er et naturligt maksimum, da der her er tale om kategorier indenfor cykeludstyr. Så jeg tror jeg vælger din sidste løsning, da den ikke kræver så meget ekstra indsættelses-arbejde :o)
Synes godt om
Slettet bruger
29. april 2005 - 13:10#23
Jeg har prøvet at lave en UNION nu, men det går galt. Den siger at der er syntaks fejl:
(SELECT tilbehoer1.id as t1 FROM tilbehoer1 WHERE over='". $sid ."' ) UNION (SELECT tilbehoer2.id as t2 FROM tilbehoer2 WHERE over=t1) (SELECT tilbehoer3.id as t3 FROM tilbehoer3 WHERE over=t2) (SELECT tilbehoer4.id as t4 FROM tilbehoer4 WHERE over=t3)
$sid = 1.
Synes godt om
Slettet bruger
29. april 2005 - 13:11#24
(SELECT tilbehoer1.id as t1 FROM tilbehoer as tilbehoer1 WHERE over='". $sid ."' ) UNION (SELECT tilbehoer2.id as t2 FROM tilbehoer as tilbehoer2 WHERE over=t1) (SELECT tilbehoer3.id as t3 FROM tilbehoer as tilbehoer3 WHERE over=t2) (SELECT tilbehoer4.id as t4 FROM tilbehoer as tilbehoer4 WHERE over=t3)
Den sidste er den rigtige.!
Synes godt om
Slettet bruger
29. april 2005 - 13:13#25
Jeg havde glemt at skrive "UNION" mellem dem, det må du undskylde.!
Jeg vil ikke lave det så "statisk", at der bliver nødt til at være et limit. Derfor vælger jeg at lave en rekursiv funktion. Så jeg vil ikke bruge din hjælp lige nu, men gemme den til en anden god gang :o) - Endnu en gang tak Arne Vajhøj.
Synes godt om
Slettet bruger
29. april 2005 - 22:54#28
I stedet for at "give op", vil jeg i stedet prøve at få dette til at lykkes. Man kommer jo ingen vegne hvis man giver op :o)
Alle SELECT i en UNION skal returnere det samme antal kolonner.
(SELECT f1,f2 FROM t1) UNION (SELECT f1,f2,f3 FROM t2)
duer ikke
men
(SELECT f1,f2,NULL FROM t1) UNION (SELECT f1,f2,f3 FROM t2)
bør være OK
ditto med
(SELECT f1,f2,'' FROM t1) UNION (SELECT f1,f2,f3 FROM t2)
hvis det passer bedre
Synes godt om
Slettet bruger
29. april 2005 - 23:32#37
Nå ja det var logisk nok. Jeg tænkte (ved ikke helt hvorfor) at der var forskelligt antal rækker. Så jeg var lidt forvirret :o)
Synes godt om
Slettet bruger
29. april 2005 - 23:37#38
Jeg kan ikke rigtig finde ud af at tage værdier fra den første union, og føre dem hen i den næste.
SELECT t.* FROM tilbehoer_v as t WHERE t.over='". $sid ."' UNION SELECT t1.* FROM tilbehoer_v as t, tilbehoer_v as t1 WHERE t1.over=t.id OR t1.over='". $sid ."'
(SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1 WHERE tilbehoer_v.over=t1.id AND t1.id = X) UNION (SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1,tilbehoer t2 WHERE tilbehoer_v.over=t1.id AND t1.over=t2.id AND t2.id = X) UNION (SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1,tilbehoer t2,tilbehoer t3 WHERE tilbehoer_v.over=t1.id AND t1.over=t2.id AND t2.over=t3.id AND t3.id = X)
Synes godt om
Slettet bruger
30. april 2005 - 19:59#49
Hvordan kan det være at: 1. du sætter parentes rundt om dine UNION's, da manualen ikke gør det.
2. Du siger "FROM", alle de foregående tabeller i dine nye joins. Måske har jeg ikke helt forstået idéen i union? :o)
en UNION stabler resultatet af 2 helt uafhængige SELECT sætninger oven på hinanden
Synes godt om
Slettet bruger
30. april 2005 - 20:03#52
Nååh, nu er jeg med :o), jeg skulle bare lige have den kickstartet. :o) Jeg afprøver den om ½ times tid, når jeg sidder hjemme. Mange tak arne.
Synes godt om
Slettet bruger
30. april 2005 - 20:26#53
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
(SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1 WHERE tilbehoer_v.over=t1.id AND t1.id = '0') UNION (SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1,tilbehoer t2 WHERE tilbehoer_v.over=t1.id AND t1.over=t2.id AND t2.id = '0') UNION (SELECT tilbehoer_v.* FROM tilbehoer_v,tilbehoer t1,tilbehoer t2,tilbehoer t3 WHERE tilbehoer_v.over=t1.id AND t1.over=t2.id AND t2.over=t3.id AND t3.id = '0'
Synes godt om
Slettet bruger
30. april 2005 - 20:27#54
Her er $sid = '0'. Jeg kan ikke helt finde fejlen. (de sidste to linier er linie 5)
Synes godt om
Slettet bruger
30. april 2005 - 20:29#55
Manglende slutparentes. Den tager jeg på min kappe.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.