I've got 4 different user (punter) tables (terrible idea but massive redesign needed a long time ago) that I need to list users from a particular event.
I've looked at this post but no joy MySQL query where JOIN depends on CASE
I've also had a look through similar questions but haven't found anything I can use.
Here's my query:
SELECT
sale_id, sale_punter_type, sale_refund, sale_timestamp,
sale_punter_type,
AES_DECRYPT(punter_email, :keyPunter) AS punter_email,
punter_firstname,
punter_surname,
AES_DECRYPT(punter_postcode, :keyPunter) AS punter_postcode,
AES_DECRYPT(punter_checkout_email, :keyPunter) AS punter_checkout_email,
punter_checkout_firstname,
punter_checkout_surname,
AES_DECRYPT(punter_checkout_postcode, :keyPunter) AS punter_checkout_postcode,
AES_DECRYPT(punter_compo_email, :keyPunter) AS punter_compo_email,
punter_compo_firstname,
punter_compo_surname,
AES_DECRYPT(punter_shop_email, :keyPunter) AS punter_shop_email,
punter_shop_firstname,
punter_shop_surname
FROM
sale
INNER JOIN
ticket_sold ON sale_id = ticket_sold_sale_no
INNER JOIN
event ON event_id = ticket_sold_event_no
INNER JOIN
(CASE
WHEN
sale_punter_type = 1 THEN punter ON punter_id = sale_punter_no
WHEN
sale_punter_type = 2 THEN punter_checkout ON punter_checkout_id = sale_punter_no
WHEN
sale_punter_type = 3 THEN punter_compo ON punter_compo_id = sale_punter_no
WHEN
sale_punter_type = 4 THEN punter_shop ON punter_shop_id = sale_punter_no
END)
WHERE
event_id = :id
I tried using LEFT JOIN:
SELECT
sale_id, sale_punter_type, sale_refund, sale_timestamp,
sale_punter_type,
AES_DECRYPT(punter_email, :keyPunter) AS punter_email,
punter_firstname,
punter_surname,
AES_DECRYPT(punter_postcode, :keyPunter) AS punter_postcode,
AES_DECRYPT(punter_checkout_email, :keyPunter) AS punter_checkout_email,
punter_checkout_firstname,
punter_checkout_surname,
AES_DECRYPT(punter_checkout_postcode, :keyPunter) AS punter_checkout_postcode,
AES_DECRYPT(punter_compo_email, :keyPunter) AS punter_compo_email,
punter_compo_firstname,
punter_compo_surname,
AES_DECRYPT(punter_shop_email, :keyPunter) AS punter_shop_email,
punter_shop_firstname,
punter_shop_surname
FROM
sale
INNER JOIN
ticket_sold ON sale_id = ticket_sold_sale_no
INNER JOIN
event ON event_id = ticket_sold_event_no
INNER JOIN
punter ON punter_id = sale_punter_no
LEFT JOIN
punter_checkout ON punter_checkout_id = sale_punter_no
LEFT JOIN
punter_compo ON punter_compo_id = sale_punter_no
LEFT JOIN
punter_shop ON punter_shop_id = sale_punter_no
WHERE
event_id = :id
but it returned users with the same ID but from different tables.
I'm not sure how to explain it, I need something like
IF sale_punter_no = 1 THEN INNER JOIN punter ON punter_id = sale_punter_no
Hopefully that makes sense and mysql can do such things
Thank you