Avatar billede mini-me Nybegynder
04. maj 2009 - 19:56 Der er 13 kommentarer og
1 løsning

SQL forespørgsel

Hej,

Jeg har en tabel bestående af:

tabel: products
ProduktID - ProduktNavn - Gruppe
10 | Vandhane | VVS_underside1
20 | Nilhane | VVS_underside1
30 | Flexror | VVS_underside1
40 | GulvRor | Kloak_artikel
50 | toiltror | Kloak_artikel
60 | vandror | vvs_underside2

Så har jeg en tabel bestående af:

tabel: internetGroups
Gruppe - GruppeNavn - ParentGroup
VVS | VVS | ''
VVS_underside1 | VVS underside 1 | VVS
VVS_underside2 | vvs underside 2 | vvs
Kloakering | Kloakering | ''
kloak_artikel | kloak ting | kloakering

Det mit spørgsmål går på er:

Hvis jeg har en sql sætning der hedder:

select * from produkter where gruppe='vvs'

så får jeg ingen resultater - det er jo ganske logisk. Men nu til den tricky del, på en eller anden måde skal jeg have lavet det til en slags rekursiv funktion - hvor jeg har en SQL sætning som undersøger for hvilke "undersider" vvs (fra tabellen internetgroups) holder og så vise alle de produkter som hører hertil.

Nogen som kan hjælpe?
Avatar billede mini-me Nybegynder
04. maj 2009 - 19:58 #1
For lige at skære det mere ud:

Når jeg fortæller min SQL sætning at det er fra VVS så er det følgende artikler jeg skal have:

10 | Vandhane | VVS_underside1
20 | Nilhane | VVS_underside1
30 | Flexror | VVS_underside1
60 | vandror | vvs_underside2

Havde jeg valgt kloakering var det følgende:

40 | GulvRor | Kloak_artikel
50 | toiltror | Kloak_artikel
Avatar billede aners Nybegynder
04. maj 2009 - 20:01 #2
where $pladder LIKE 'vvs' ...

Jeg havde nok givet siderne en id, (INT) stedet for det der med "blablablu_side1_med_dild_undersidelolkekeke".
Avatar billede mini-me Nybegynder
04. maj 2009 - 20:06 #3
Har ikke selv oprettet tabellerne.

Men kan ikke se hvordan LIKE skulle virker, det er ikke sikkert at alle undersiderne hedder noget med vvs.
Avatar billede acore Ekspert
04. maj 2009 - 20:21 #4
Hvad med:

SELECT ProduktNavn, Gruppe FROM products AS p
LEFT JOIN internetGroups AS g ON (p.Gruppe = g.Gruppe)
WHERE g.ParentGroup = 'vvs'
Avatar billede mini-me Nybegynder
04. maj 2009 - 20:33 #5
Hej,

Det giver ikke noget output...
Avatar billede mini-me Nybegynder
04. maj 2009 - 21:16 #6
Nevermind, ser ud til at virke - jeg havde bare lavet en slåfejl.

Tester lige lidt mere.
Avatar billede mini-me Nybegynder
04. maj 2009 - 21:19 #7
Kan jeg også sortere dem så de kommer som den gruppe de tilhøre?
Avatar billede acore Ekspert
04. maj 2009 - 21:55 #8
SELECT ProduktNavn, Gruppe FROM products AS p
LEFT JOIN internetGroups AS g ON (p.Gruppe = g.Gruppe)
WHERE g.ParentGroup = 'vvs'
ORDER BY p.Gruppe, ProduktNavn

Erstat evt p.Gruppe, ProduktNavn med de andre felter, du vil sortere efter
Avatar billede mini-me Nybegynder
06. maj 2009 - 13:03 #9
Hej,

Det virker efter hensigten smid et svar :)
Avatar billede acore Ekspert
06. maj 2009 - 19:56 #10
Det var godt!
Avatar billede mini-me Nybegynder
13. maj 2009 - 19:25 #11
Hej,

Der er en lille twist...

SELECT item, description, optional1, optional2, optionalnumber1, internetgroup FROM inventory AS p LEFT JOIN InternetGroup AS g ON (p.internetgroup = g.grouping) WHERE (g.ParentGroup = '"&strUrl&"' or p.InternetGroup= '" & strURL & "') and p.WebUseOnWeb=1"

Den virker fint - men når jeg så vil have GUID feltet fra inventory så kommer den med følgende fejl: ambiguous coulnm name "guid"

SELECT guid, item, description, optional1, optional2, optionalnumber1, internetgroup FROM inventory AS p LEFT JOIN InternetGroup AS g ON (p.internetgroup = g.grouping) WHERE (g.ParentGroup = '"&strUrl&"' or p.InternetGroup= '" & strURL & "') and p.WebUseOnWeb=1"


Der er et felt i både inventory og internetgroup der hedder guid... jeg kan godt skrive den sådan her:

SELECT * FROM inventory AS p LEFT JOIN InternetGroup AS g ON (p.internetgroup = g.grouping) WHERE (g.ParentGroup = '"&strUrl&"' or p.InternetGroup= '" & strURL & "') and p.WebUseOnWeb=1"

men så kan jeg ikke rigtig finde ud af hvordan jeg skal få fat i den via ASP. Får bruger jeg rs("GUid") så resultere den i ingenting.
Avatar billede mini-me Nybegynder
13. maj 2009 - 19:38 #12
dvs. det er ikke helt rigtigt.

SELECT * FROM inventory AS p LEFT JOIN InternetGroup AS g ON (p.internetgroup = g.grouping) WHERE (g.ParentGroup = '"&strUrl&"' or p.InternetGroup= '" & strURL & "') and p.WebUseOnWeb=1"

Bruger jeg den får jeg GUID fra InterNetGroup, når jeg kalder den via rs("GUID") men skal bruge det guid fra Inventory.
Avatar billede knowit-mmp Nybegynder
25. maj 2009 - 22:36 #13
Det er fordi, du har 2 felter der hedder guid - i dit recordset vil der sandsynligvis være et andet felt, der hedder guid_1, som vil repræsentere det andet guid-felt i dit kald.

Evt. kan du omkrive dit kald til :

SELECT inventory.*,InternetGroup.guid as internetgroupguid [+evt. andre felter fra internetgroup]
FROM inventory AS p LEFT JOIN InternetGroup AS g ON (p.internetgroup = g.grouping) WHERE (g.ParentGroup = '"&strUrl&"' or p.InternetGroup= '" & strURL & "') and p.WebUseOnWeb=1"

Så vil du kunne kalde den korrekte guid med rs("guid")
Avatar billede mini-me Nybegynder
25. maj 2009 - 22:41 #14
Super det prøver jeg ;-)

tak for det!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester