The title might be worded strange, but it’s probably because I don’t even know if I’m asking the right question.
So essentially what I’m trying to build is a “breadcrumbish” categoricalization type system (like a file directory) where each node has a parent (except for root) and each node can contain either data or another node. This will be used for organizing email addresses in a database. I have a system right now where you can create a “group” and add email addresses to that group, but it would be very nice to add an organizational system to it.
This (in my head) is in a tree format, but I don’t know what tree.
The issue I’m having is building it using MySQL. It’s easy to traverse trees that are in memory, but on database, it’s a bit trickier.
Image of tree: http://j.imagehost.org/0917/asdf.png
SELECT * FROM Businesses:
Tim’s Hardware Store, 7-11, Kwik-E-Mart, Cub Foods, Bob’s Grocery Store, CONGLOM-O
SELECT * FROM Grocery Stores:
Cub Foods, Bob’s Grocery Store, CONGLOM-O
SELECT * FROM Big Grocery Stores:
CONGLOM-O
SELECT * FROM Churches:
St. Peter’s Church, St. John’s Church
I think this should be enough information so I can accurately describe what my goal is.
Well, there are a few patterns you could use. Which one is right depends on your needs.
Do you need to select a node and all its children? If so, then a Nested set Model (Scroll down to the heading) may be better for you. The table would look like this:
So then, to find anything below a node, just do
To find everything above the node:
If you only want to query for a specific level, you could do an Adjacency List Model (Scoll down to the heading):
To find everything on the same level, just do:
Of course, there’s nothing stopping you from doing a hybrid approach which will let you query however you’d like for the query at hand
Really, it’s just a matter of your needs…