Conditional INNER JOIN

Conditional INNER JOIN

am 25.05.2008 01:08:56 von Ron Piggott

Is it possible to do a conditional INNER JOIN ?

So far I have

SELECT * FROM ( shopping_cart_orders INNER JOIN
shopping_cart_sales_shipping_address ON
shopping_cart_orders.shipping_address_reference =
shopping_cart_sales_shipping_address.reference )

If shopping_cart_sales_shipping_address.same_as_customer has a value of
"0" I need to

INNER JOIN shopping_cart_sales_billing_address WHERE
shopping_cart_sales_billing_address.shipping_address_referen ce =
shopping_cart_sales_shipping_address.reference

otherwise the shipping address is the same as the billing address.
Suggestions?

Ron


--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Conditional INNER JOIN

am 25.05.2008 01:40:25 von Bastien Koert

------=_Part_22305_4134471.1211672425573
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On 5/24/08, Ron Piggott wrote:
>
> Is it possible to do a conditional INNER JOIN ?
>
> So far I have
>
> SELECT * FROM ( shopping_cart_orders INNER JOIN
> shopping_cart_sales_shipping_address ON
> shopping_cart_orders.shipping_address_reference =
> shopping_cart_sales_shipping_address.reference )
>
> If shopping_cart_sales_shipping_address.same_as_customer has a value of
> "0" I need to
>
> INNER JOIN shopping_cart_sales_billing_address WHERE
> shopping_cart_sales_billing_address.shipping_address_referen ce =
> shopping_cart_sales_shipping_address.reference
>
> otherwise the shipping address is the same as the billing address.
> Suggestions?
>
> Ron
>
>
>
>
Ron,

you can't do conditional joins but you can use the CASE WHEN THEN structure
to handle what you need. Check out the mysql docs for that



--

Bastien

Cat, the other other white meat

------=_Part_22305_4134471.1211672425573--

Re: Conditional INNER JOIN

am 25.05.2008 02:41:37 von Ron Piggott

This still isn't working; am I close?

SELECT * FROM ( shopping_cart_orders INNER JOIN
shopping_cart_sales_shipping_address ON
shopping_cart_orders.shipping_address_reference =
shopping_cart_sales_shipping_address.reference ) CASE
shopping_cart_sales_shipping_address.same_as_customer WHEN
shopping_cart_sales_shipping_address.same_as_customer = '0' THEN INNER
JOIN shopping_cart_sales_billing_address ON
shopping_cart_sales_billing_address.shipping_address_referen ce =
shopping_cart_sales_shipping_address.reference

On Sat, 2008-05-24 at 19:40 -0400, Bastien Koert wrote:
>
>
> On 5/24/08, Ron Piggott wrote:
> Is it possible to do a conditional INNER JOIN ?
>
> So far I have
>
> SELECT * FROM ( shopping_cart_orders INNER JOIN
> shopping_cart_sales_shipping_address ON
> shopping_cart_orders.shipping_address_reference =
> shopping_cart_sales_shipping_address.reference )
>
> If shopping_cart_sales_shipping_address.same_as_customer has a
> value of
> "0" I need to
>
> INNER JOIN shopping_cart_sales_billing_address WHERE
> shopping_cart_sales_billing_address.shipping_address_referen ce
> =
> shopping_cart_sales_shipping_address.reference
>
> otherwise the shipping address is the same as the billing
> address.
> Suggestions?
>
> Ron
>
>
>
>
> Ron,
>
> you can't do conditional joins but you can use the CASE WHEN THEN
> structure to handle what you need. Check out the mysql docs for that
>
>
>
> --
>
> Bastien
>
> Cat, the other other white meat


--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Conditional INNER JOIN

am 25.05.2008 03:47:23 von Bastien Koert

------=_Part_22454_20102360.1211680043091
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On 5/24/08, Ron Piggott wrote:
>
>
> This still isn't working; am I close?
>
> SELECT * FROM ( shopping_cart_orders INNER JOIN
> shopping_cart_sales_shipping_address ON
> shopping_cart_orders.shipping_address_reference =
> shopping_cart_sales_shipping_address.reference ) CASE
> shopping_cart_sales_shipping_address.same_as_customer WHEN
> shopping_cart_sales_shipping_address.same_as_customer = '0' THEN INNER
> JOIN shopping_cart_sales_billing_address ON
> shopping_cart_sales_billing_address.shipping_address_referen ce =
> shopping_cart_sales_shipping_address.reference
>
> On Sat, 2008-05-24 at 19:40 -0400, Bastien Koert wrote:
> >
> >
> > On 5/24/08, Ron Piggott wrote:
> > Is it possible to do a conditional INNER JOIN ?
> >
> > So far I have
> >
> > SELECT * FROM ( shopping_cart_orders INNER JOIN
> > shopping_cart_sales_shipping_address ON
> > shopping_cart_orders.shipping_address_reference =
> > shopping_cart_sales_shipping_address.reference )
> >
> > If shopping_cart_sales_shipping_address.same_as_customer has a
> > value of
> > "0" I need to
> >
> > INNER JOIN shopping_cart_sales_billing_address WHERE
> > shopping_cart_sales_billing_address.shipping_address_referen ce
> > =
> > shopping_cart_sales_shipping_address.reference
> >
> > otherwise the shipping address is the same as the billing
> > address.
> > Suggestions?
> >
> > Ron
> >
> >
> >
> >
> > Ron,
> >
> > you can't do conditional joins but you can use the CASE WHEN THEN
> > structure to handle what you need. Check out the mysql docs for that
> >
> >
> >
> > --
> >
> > Bastien
> >
> > Cat, the other other white meat
>
> http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

as mentioned you can't include tables conditionally, you can only handle a
columns data with this

but i think the real issue here is that if the user checks the 'same as
address' box, you should just populate the table with the same data,
therefore allowing the sql to be consistent


--

Bastien

Cat, the other other white meat

------=_Part_22454_20102360.1211680043091--

Re: Conditional INNER JOIN

am 26.05.2008 20:27:17 von Martin Alsinet

2008/5/24 Ron Piggott :
> Is it possible to do a conditional INNER JOIN ?
>
> So far I have
>
> SELECT * FROM ( shopping_cart_orders INNER JOIN
> shopping_cart_sales_shipping_address ON
> shopping_cart_orders.shipping_address_reference =
> shopping_cart_sales_shipping_address.reference )
>
> If shopping_cart_sales_shipping_address.same_as_customer has a value of
> "0" I need to
>
> INNER JOIN shopping_cart_sales_billing_address WHERE
> shopping_cart_sales_billing_address.shipping_address_referen ce =
> shopping_cart_sales_shipping_address.reference
>
> otherwise the shipping address is the same as the billing address.
> Suggestions?

If the fields of both queries are the same, you can use UNION to
collect all the records:

SELECT
*
FROM
(
SELECT * FROM
shopping_cart_orders
INNER JOIN
shopping_cart_sales_shipping_address
ON
shopping_cart_orders.shipping_address_reference =
shopping_cart_sales_shipping_address.reference
WHERE
shopping_cart_sales_shipping_address.same_as_customer <> 0
)
UNION
(
SELECT * FROM
shopping_cart_orders
INNER JOIN
shopping_cart_sales_billing_address
ON
shopping_cart_sales_billing_address.shipping_address_referen ce =
shopping_cart_sales_shipping_address.reference
WHERE
shopping_cart_sales_shipping_address.same_as_customer = 0
)

Hope it helps


Martin

--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php