Scott Webster Wood wrote:
let'sjust say I left Property1 blank on the link forWindows and also
in it's parent Desktop but had it filled in on theDesktop parent
Computers (as shown above). If I wanted to find the Property1 for
the sub category but found it blank, I'd like to grab thevalue from
the next parent(s) above it that did have a value.
Is there any way to writethat kind of recursive search right in the
SQL itself rather than doingtons of lookups in an 'until' type
structure in my scripting languageuntil I find a value that's not
null?
This sounds rather like a poor database design.
Each row of a table should contain one "fact", which can then be merged
via JOIN to incorporate supplementary information pertaining to that
single fact. You shouldn't really need to go recursing through a data
tree to come up with all the parts of a single fact.
For your example, which I've omitted in preference of brevity, I would
suggest adding a property table with two columns: primary key for
property id and property description. Then, instead of storing property
description text separately in your categories and categoryLinks tables,
have a foreign key reference the id column in the property table.
In addition, I'd get rid of your categoryLinks table altogether. In the
categories table, for each row that needs a parent, include a foreign
key that references that same table's primary key. Then, OUTER JOIN the
table to itself later.
If your tree is going to be very deep, keep in mind that some databases
impose (reasonable) limits on the number of JOINs that can be in a
single SQL statement. In the end, you may want to do some processing in
a stored procedure, too, rather than relying on a single SQL query to
provide your entire hierarchy.
Just my $0.02.
Also, since the DBI list isn't really the right place to ask database
design questions, you'll probably want to find a more SQL-centric forum
for future questions. PostgreSQL maintains a pgsql-sql list for
SQL-specific questions, for example.
PostgreSQL would probably be a very good choice for your implementation,
by the way, since it has extensive text searching abilities.
Colin