[thelist] help with SQL and PHP

rudy r937 at interlog.com
Tue Dec 10 12:07:00 CST 2002


> So Question #1 - how can I pull all the categories in my SQL above
> as well as what I am already getting.

this is a trickier question than you realize

you're currently getting each menuitem with its category via the first,
inner join

however, if a menuitem can exist without belonging to a category, then, as
you discovered, it won't be included in the inner join

category-to-menuitem is one-to-many, or, if you turn it around,
menuitem-to-category is one-to-one, but that's only part of the story

can menuitem-to-category be zero-to-one? or must each menuitem have a
category?

if you allow a menuitem to exist without belonging to a category, then you
have a foreign key that may be null, a perfectly valid arrangement,
depending on the business rules that the model is supposed to support

it's not a question of which is easier for you, inner joins or outer joins,
but rather which database relationship more accurately models this
particular restaurant

if this restaurant can have no-category menuitems, you need to use an outer
join in those circumstances where you want the query to return all menuitems

okay, deep breath

as for returning categories with no menuitems, consider for the moment that
there are no subcategories, just categories and menuitems

the other side of the category-menuitem relationship is whether a category
can exist without any menuitems in it

assuming the answer is yes, then you'd need an outer join in that direction,
and if you combine that with the above requirement, menuitems without
categories, then you are looking at doing a "full outer join"

complicating the whole deal is the category-subcategory structure, with the
likelihood that menuitems can be related to either a subcategory or a
category, and that a category may or may not have any subcategories (another
outer join in the offing) and you end up with very complicated retrieval
requirements indeed, assuming you wanted to print everything out, nicely
nested, with menuitems at any level, or not at all, and categories with or
without menuitems, and with or without subcategories...

so when you ask how to fix your sql, i'm not really sure how to answer that
because i don't really know whether you plan to allow these optional
relationships to continue


rudy




More information about the thelist mailing list