Avatar billede jespera Nybegynder
30. september 2006 - 12:07 Der er 9 kommentarer og
1 løsning

Select produkt data fra 2 tabeller

Hej Alle,

Jeg er igang med en lille shop og skal nu trække noget data ud fra nogle tabeller. Så jeg håber i kan hjælpe...

Jeg har en tabel som hedder "shop_products" som indeholder

product_id
product_group_id
product_item_id    product_name   
product_description
product_price
product_sortorder

I en anden tabel som hedder "shop_product_customer" har jeg

customer_id
product_id
product_price

"shop_product_customer" tabellen er beregnet til kunder som skal have en speciel pris (ved ik om det er den rigtite måde at gøre det på?)

Men mit spørgsmål er så hvordan trækker jeg produkter ud fra den første tabel og hvis der er forskellige priser for kunden skal den pris vises i stedet?

Håber i kan hjælpe

Takker....
Avatar billede arne_v Ekspert
30. september 2006 - 17:45 #1
prøv:

SELECT shop_products.product_name,ISNULL(shop_product_customer.product_price,shop_products.product_price)
FROM shop_products LEFT JOIN shop_product_customer ON shop_products.product_id=shop_product_customer.product_id AND shop_product_customer.customer_id=X
Avatar billede jespera Nybegynder
01. oktober 2006 - 12:32 #2
Hej,

Den laver desværre en fejl:

#1064 - 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 ' shop_products . product_price )  FROM shop_products LEFT JOIN

Tak :-)
Avatar billede jespera Nybegynder
01. oktober 2006 - 15:00 #3
Hej, isnull dutter ikke i mysql. Man skal istedet bruge ifnull :-) så umiddelbart ser det ud til at virke nu ;-)

ligger du ikke lige et svar alligevel

Takker..
Avatar billede kjulius Novice
01. oktober 2006 - 15:03 #4
SELECT p.product_item_id, p.product_name, COALESCE(pc.product_price, p.product_price, 0)
FROM shop_products p
LEFT JOIN shop_products_customer pc ON p.product_id = pc.product_id AND pc.customer_id = ????
Avatar billede jespera Nybegynder
01. oktober 2006 - 15:17 #5
hej....

der er noget jeg ikke helt forstår. Når jeg nu sætter and p.product_group_id på så viser den stadigvæk alle varer?

SQL ser sådan her ud:

SELECT p.product_name, IFNULL( pc.product_price, p.product_price )
FROM shop_products p
LEFT JOIN shop_product_customer pc ON p.product_id = pc.product_id
AND pc.customer_id =1
AND p.product_group_id =2
LIMIT 0 , 30

hvordan kan det være?
Avatar billede jespera Nybegynder
01. oktober 2006 - 15:20 #6
ARHH GAB, jeg er lidt tung at danse med, jeg mangler where clause...

kjulius -> hvad gør COALESCE, jeg kender ik den func?
Avatar billede arne_v Ekspert
01. oktober 2006 - 17:45 #7
den gør det samme som IFNULL bare med vilkårligt antal argumenter

kjulius bruger den med 3 argumenter således at hvis prisen også er NULL i basis
tabellen vises den som 0
Avatar billede arne_v Ekspert
01. oktober 2006 - 17:46 #8
og et svar
Avatar billede jespera Nybegynder
01. oktober 2006 - 18:20 #9
alletiders arne_v :-) tak for hjælpen...
Avatar billede kjulius Novice
02. oktober 2006 - 22:40 #10
Jeg indrømmer, at COALESCE i dette tilfælde kun er minimalt anderledes end IFNULL. Men hvis du nu f.eks. havde 4 forskellige niveauer af priser (kampagner, hvoraf nogle måske er relateret til både vare og kunde) liggende i 4 tabeller, så er COALESCE meget handy. Kunsten er at arrangere felterne sådan, at den "bedste" mulighed placeres først og den "mest normale" sidst i feltrækken i COALESCE. Den første, som ikke er Null vælges.
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