Avatar billede bremer Nybegynder
01. juni 2010 - 21:31 Der er 21 kommentarer og
1 løsning

Select distict via. et simpel left join

Hej Venner,

jeg prøver at lave en SELECT DISTINCT på min tabel "ft_varerrelation" og kolonnenavn "v.pro_id"

Jeg har prøvet her under, men det ikke det ønskede resultat :(

Kan håber i kan hjælpe hertil ;)

MIN KODE:
----------------
$query_c ="SELECT DISTINCT
v.pro_id, v.shop_id,
p.id AS pid, p.pro_kat_id, p.active, p.pro_images, p.pro_navn, p.pro_infotext
               
FROM ft_produkter AS p
               
LEFT JOIN ft_varerrelation AS v
ON v.pro_id=p.id
               
WHERE p.active = 1 AND (p.pro_kat_id=$kat OR $kat=0) AND (v.shop_id=$for OR $for=0) ORDER BY p.pro_navn           
                ";
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 21:37 #1
Hvad er det ønskede resultat?
Avatar billede majbom Novice
01. juni 2010 - 21:41 #2
hvis jeg forstår "DISTINCT" rigtigt, vil den sørge for at der ikke kommer mere end én række med det samme v.pro_id ?
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 21:49 #3
Ja, hvis du skriver:

SELECT DISTINCT v.pro_id FROM ....
Avatar billede majbom Novice
01. juni 2010 - 21:52 #4
ikke hvis man skriver som spørger? er det så kun en af alle de efterfølgende felter?
Avatar billede bremer Nybegynder
01. juni 2010 - 21:55 #5
Håber dette siger dig noget....



Min tabel = "ft_varerrelation" structure indeholder lige nu;

pro_id (produktid)
shop_id (forhandlerid)
pris (prisen for produktet)

pro_id      shop_id      pris
---------- ---------    -------------
108          54          23
114          46          53
114          58          21


herunder, prøve jeg på at lave et SQL sætning hvor kun, den KUN skal vise 2 (produkter) ud af pro_id


$query_c ="SELECT DISTINCT
v.pro_id, v.shop_id,
p.id AS pid, p.pro_kat_id, p.active, p.pro_images, p.pro_navn, p.pro_infotext
             
FROM ft_produkter AS p
             
LEFT JOIN ft_varerrelation AS v
ON v.pro_id=p.id
             
WHERE p.active = 1 AND (p.pro_kat_id=$kat OR $kat=0) AND (v.shop_id=$for OR $for=0) ORDER BY p.pro_navn";
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 21:57 #6
Hvilket resultat ønsker du for de angivne værdier mht til fx shop_id?
Avatar billede majbom Novice
01. juni 2010 - 21:57 #7
men den gør hvad?
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 22:06 #8
SELECT DISTINCT a,b,c FROM ...

giver dig unikke rækker, når du betragter a,b,c samlet. Men der kan godt være flere rækker med samme a-værdi. (hvis det var det du spurgte om splazz)
Avatar billede bremer Nybegynder
01. juni 2010 - 22:13 #9
@erikjacobsen, shop_id - er den værdi, som jeg bruger til at hente til at soter på (forhandler)

men...

Det ønskede resultat skulle gerne bliv, at den skal finde ud af hvor mange produkter, "pro_id" SKAL KUN FINDES ÉN gang (unikke).
Avatar billede majbom Novice
01. juni 2010 - 22:15 #10
så hvis man har:


a b c
1 1 2
2 3 5
3 3 4


vil ingen af tallen komme mere end én gang? med dit eks. erik
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 22:21 #11
Det forstår jeg ikke, bremer. Skal det være shop_id 46 eller 48 der skal stå ud for pro_id 114? Altså: hvad, helt præcist, forventer du skal være resultatet af din forespørgsel på nogle konkrete data??

splazz:  "vil ingen af tallen komme mere end én gang" ... den forstår jeg heller ikke.

(Det kan være det bare er mig ... *g* ...)
Avatar billede majbom Novice
01. juni 2010 - 22:34 #12
det jeg mener er at den selvfølgelig umiddelbart vil vælge alle 3 rækker hvis vi tager ud fra kolonne a, men hvis vi også har kolonne b med som distinct, forekommer tallet 3, to gange, så derfor kommer der kun linje 1 og 2?

det kan osse være jeg er helt galt på den, og det er heller ikke mig der skal have hjælp her - undskyld for forstyrelsen #0
Avatar billede bremer Nybegynder
01. juni 2010 - 22:34 #13
Det har hjælper måske :)

Min TABEL "ft_varerrelation" (Ved godt der er stavefejl!)

for at giv bedre indblik i min tabel, har tilføjet lidt flere priser.

MIN TABEL:
------------
pro_id      shop_id      pris
---------- ---------    -------------
114          54          23
114          46          53
114          58          21
114          56          34
114          58          32
108          44          21
114          48          4
114          50          54
114          54          47
114          46          26
114          52          22
114          53          11

Hertil ønsker jeg bare kunne lave en udtræk på "pro_id" hvor man for de forskellige "pro_id'er" (produkter) der findes i tabel.

RESULTAT = 2 (pro_id) så nu ved jeg er der findes to produkter, og ikke 12 produkter!

er dette er spiseligt!?
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 22:46 #14
SELECT COUNT(DISTINCT pro_id) FROM ft_varerrelation

vil give dig et 2-tal som resultat.
Avatar billede bremer Nybegynder
01. juni 2010 - 22:52 #15
FEDT! - jeg fandt en løsning som hedder

group by v.pro_id order by max(pro_id)


@erikjacobsen - send et svar afsted :)
Avatar billede erikjacobsen Ekspert
01. juni 2010 - 22:57 #16
Måske... Men bekymrer det dig ikke, at du ikke er i stand til at svare på et simpelt spørgsmål som "hvad, helt præcist, forventer du skal være resultatet af din forespørgsel på nogle konkrete data"

Du har heller ikke forstået den "GROUP BY", når du bruger "max".
Avatar billede bremer Nybegynder
01. juni 2010 - 23:33 #17
Tja, det prøver jeg ellers ydmygende på... - men det er også et gammel ordspil som lyder, søg og du skal finde! - hvad gør man så, når man ikke ved hvad med skal søge efter?!

Men igen tak for jeres hjælp og jeres tid!
Avatar billede majbom Novice
06. juli 2010 - 20:00 #18
blev vi færdige bremer?
Avatar billede majbom Novice
04. november 2010 - 14:04 #19
bremer?
Avatar billede bremer Nybegynder
24. april 2012 - 19:47 #20
hej splazz,

Sender du et svar!? - beklager det har taget et par dage :)
Avatar billede majbom Novice
25. april 2012 - 06:11 #21
svar...
Avatar billede majbom Novice
25. april 2012 - 10:34 #22
tfp..
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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