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

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