[thelist] Multiple columns instead of rows w/ LEFT JOIN
Matt Warden
mwarden at gmail.com
Fri Jan 13 14:58:55 CST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Max Schwanekamp wrote:
> In MySQL I have a master table of products with a one-to-many
> relationship to product options. Right now I do something like this:
> SELECT p.id, p.name, o.id AS opt_id, o.desc AS color
> FROM products p
> LEFT JOIN options o
> ON p.id = o.product_id
>
> I get a result consisting of one row for each option row found, like this:
> +----+----------+--------+-------+
> | id | name | opt_id | color |
> +----+----------+--------+-------+
> | 1 | widget | 1 | red |
> | 1 | widget | 2 | green |
> | 1 | widget | 3 | blue |
> +----+----------+--------+-------+
>
> In PHP I like to put my db results into an array or object, so when I do
> this I usually end up pulling the first row and then iterating over the
> remaining rows to get a child array of the options. When there is more
> than one left-joined table, the loops can get pretty spaghetti-ish --
> e.g. if I add a "size" option to the above, there would be a row for
> every available size in each color. It does avoid the overhead of
> multiple database queries for populating a single object's properties,
> but I'm thinking there must be a better way. Suggestions on how to do
> this more efficiently using PHP and MySQL?
Well, it depends. If every color can come in every size, then there is
no need to get all size-color combinations. However, if that rule does
not hold, then you have to do it like you are suggesting, because you
must maintain a relationship between sizes and colors. (Although, you
could always allow the user to select all sizes and all colors, and then
check later whether that combo is available; but that can be frustrating
for the user.)
- --
Matt Warden
Miami University
Oxford, OH, USA
http://mattwarden.com
This email proudly and graciously contributes to entropy.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFDyBSPrI3LObhzHRMRAtPvAKDf5w/jZwhxSoKpBO6P5eDlW/iGbACeLq3q
i11fXoH6izVqy5Xfcx2mld0=
=rCMA
-----END PGP SIGNATURE-----
More information about the thelist
mailing list