Forum Moderators: open

Message Too Old, No Replies

sql query

stuck on creating a link field

         

shumboom

11:29 pm on May 26, 2008 (gmt 0)

10+ Year Member



Hi

I have two tables

Parts which just holds the names of a lot of parts

CREATE TABLE `parts` (
`PartId` int(11) NOT NULL auto_increment,
`partname` varchar(255) default NULL,
PRIMARY KEY (`PartId`)
)

and partslink which holds which part is needed by which other part

CREATE TABLE `partslink` (
`LinkID` int(11) NOT NULL auto_increment,
`PartID` int(11) default NULL,
`LinkPartID` int(11) default NULL,
PRIMARY KEY (`LinkID`)

I need a query that will give me not only the direct links to any given part but those that are linked to the direct links as well.

So if part 3 requires parts 11,18 and 22

And 18 requires 67 101
and 11 requires 59 101
and 22 requires 47 104 224

then my query should return the following

PartNo LinkedBy
11 3
18 3
22 3
67 18
101 18
59 11
47 22
104 22
224 22

As you can see I have removed any duplicate parts as well and ordered by closest links. What would be really cool is if the linkedby field could go down another step and I could get parts 2 links down from my original part.

looking forwards to your replies.
Shumit

wingnut

4:00 pm on May 30, 2008 (gmt 0)

10+ Year Member



You need to do a Union select for instance:

SELECT partslink.PartID
FROM partslink
INNER JOIN parts ON partslink.PartID = parts.PartID
WHERE partslink.LinkPartID = @PartID

UNION SELECT partslink.PartID
FROM partslink
INNER JOIN parts ON partslink.PartID = parts.PartID
WHERE partslink.PartID = @PartID

ORDER BY partslink.PartID

--@PartID being the passed variable

shumboom

3:25 pm on Jun 3, 2008 (gmt 0)

10+ Year Member



Thanks but it doesnt seem to work. All it is giving me is the records of my part in either column. I need to find the parts that are linked to the original part. if the link data is such

1 2
1 3
3 4
3 5
2 4
5 6
6 1
6 7

than a query for part 5 should give me

5 6
6 1
6 7

regards,Shumit

syber

3:45 pm on Jun 11, 2008 (gmt 0)

10+ Year Member



Using the example above for part 5:

SELECT PartID, LinkID
FROM partslink
WHERE PartID = 5

UNION

SELECT partslink.PartID, partslink.LinkID
FROM partslink INNER JOIN partslink p2
ON partslink.LinkID = p2.PartID
WHERE partslink.PartID = 5

wingnut

9:38 am on Jun 12, 2008 (gmt 0)

10+ Year Member



Try

SELECT partslink.PartID, partslink.LinkPartID
FROM partslink
INNER JOIN parts ON partslink.PartID = parts.PartID
WHERE partslink.PartID = 5

UNION ALL

SELECT partslink.PartID, partslink.LinkPartID
FROM partslink
INNER JOIN parts ON partslink.LinkPartID = parts.PartID

ORDER BY partslink.PartID

shumboom

12:15 pm on Jun 12, 2008 (gmt 0)

10+ Year Member



cool! Thanks.