Avatar billede pcl Nybegynder
26. marts 2004 - 11:06 Der er 11 kommentarer

Svær query

Jeg har denne Query

SELECT ID, Titel1, Pris, FoerPris, stdImage, ProdukterLager

FROM Products WHERE Deleted = 0

And categoryID IN (SELECT ID FROM categories WHERE pageID = 149)


Hvor pageID kan ændre sig.

Nu vil jeg gerne vælge Produkterhvor categoryID er lig med  ParentID fra categories tabellen.
Men hvordan gøres det?


Categories tabellen ser således ud:

ID      Name        PageId        ParentId
-----------------------------------------------------------------
1        Pagename    149            0

2        Subpage      150            1

3        Subpage 2    151            1

4        Subpage 3    152            1
Avatar billede pcl Nybegynder
26. marts 2004 - 11:07 #1
Det er noget ala

SELECT ID, Titel1, Pris, FoerPris, stdImage, ProdukterLager

FROM ishop_produkter WHERE Deleted = 0

And categoryID IN (SELECT ID FROM ishop_categories WHERE pageID = 149)

OR categoryID IN (SELECT ID FROM ishop_categories where parentId = 4)

Hvor 4 bare skal erstattes af værdien i categoryID , men jeg kan ikke få det til at virke korrekt.
Avatar billede trer Nybegynder
26. marts 2004 - 11:15 #2
Det er ikke bare en inner join du mener ?

select *
from ishop_produkter inner join Ishop_categories
on categoryID = parentID
Avatar billede pcl Nybegynder
26. marts 2004 - 13:25 #3
Måske, men hvordan skulle det kobles sammen med ovenstående?
Avatar billede trer Nybegynder
26. marts 2004 - 13:49 #4
prøv lige at komme med et dataeksempel fra produkter-tabellen og det ønskede resultat - så tror jeg godt jeg kan give et bud.
Avatar billede pcl Nybegynder
26. marts 2004 - 13:57 #5
Ok. Noget ala dette?

Produkt tabel
iD    Titel1            Pris    FoerPris stdImage    KategoriID ProdukterLager
111    Produkt 1    1199    1299    image1.jpg  26              12


Resultat

111    Produkt 1    1199.0    1299.0    image1.jpg  26      12
112    Produkt 2    1199.0    1299.0    MEFA842K-2.jpg    4    26
Avatar billede trer Nybegynder
26. marts 2004 - 14:26 #6
Fint, hvis jeg forstår dig ret, så vil

select p.id, p.titel1, p.pris, p.foerpris, p.stdimage, p.categoryid, p.produkterlager
from ishop_products p
inner join ishop_categories c
on (p.categoryid = c.id or p.categoryid = c.parentid)
and p.deleted=0
--where c.pageid = 149

levere det ønskede ?
NB: kolonnenavnene skal nok lige checkes...

Du kan sætte den udkommenterede where betingelse på hvis du har behov for den.
Avatar billede pcl Nybegynder
26. marts 2004 - 15:32 #7
Hmm,

Denne her giver det rigtigte resultat.

Problemmet er at ParentId i den sidste linje skal lig med categoryID  Eller ID fra linjen ovenover.

SELECT ID, Titel1, Pris, FoerPris, stdImage, ProdukterLager, categoryID

FROM ishop_produkter WHERE Deleted = 0

And categoryID IN (SELECT ID FROM ishop_categories WHERE pageID = 149)
Or
categoryID IN (SELECT ID FROM ishop_categories WHERE ParentID = 4)
Avatar billede pcl Nybegynder
26. marts 2004 - 15:43 #8
Den du har lavet ser egentlig rigtig ud, men af en eller anden grund får jeg ikke de rigtigt produkter, rent fakstisk får jeg slet ingen (med where c.pageid = 149 og alle uden where c.pageid = 149).
Avatar billede trer Nybegynder
26. marts 2004 - 22:10 #9
Hmm... Muligvis forstår jeg ikke helt hvor du vil hen.

Den du har med OR på categoryID vil returnere alle der enten har pageid=149 eller hvor parentid=4.  Der er ingen binding "på tværs" af de to betingelser.

Kan du ikke skrive nogle flere linjer med test-data til de forskellige tabeller og resultatet?
Avatar billede janus_007 Nybegynder
02. april 2004 - 01:10 #10
Heps - Jeg blander mig lige lidt :O)

pcl -> hvis du bare vil have at sidste linje i din select skal være lig med categoryID så gør sådan her:

SELECT ID, Titel1, Pris, FoerPris, stdImage, ProdukterLager, categoryID
FROM ishop_produkter ip WHERE Deleted = 0
And ip.categoryID IN (SELECT ID FROM ishop_categories WHERE pageID = 149)
Or
ip.categoryID IN (SELECT ID FROM ishop_categories WHERE ParentID = ip.categoryID)

Det er ikke det kønneste sarg, men hvis du kan klare dig er det jo topnice :O)
Avatar billede pcl Nybegynder
02. april 2004 - 09:31 #11
Ja Janus,

det ser rigtigt ud, men der kommer kun data fra den første (And ip.categoryID IN (SELECT ID FROM ishop_categories WHERE pageID = 149) ).

De data der hører til den sidste del af queryen kommer ikke med.

Jeg fatter det ikke!.
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