我(反思可笑地)将我们的“下注者”存储在2个表格中,具体取决于他们是通过快速结账表格注册还是付款。
我的SQL看起来像这样:
SELECT
DISTINCT(sale_id), sale_punter_type, sale_comment, sale_refund, sale_timestamp,
punter_surname, punter_firstname,
punter_checkout_surname, punter_checkout_firstname,
punter_compo_surname, punter_compo_firstname,
sale_random, sale_scanned, sale_id
FROM
sale
LEFT 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
WHERE
sale_event_no = :id
ORDER BY
punter_surname, punter_firstname,
punter_checkout_surname, punter_checkout_firstname
它返回结果但是首先按字母顺序列出注册用户,然后按字母顺序查看结帐用户。
我的问题是有一种方法可以将所有用户(已注册或结帐)一起按字母顺序排列在1个排序列表中,而不是2个已加入的排序列表。
我想也许我可以使用像punter_checkout_surname AS punter_surname这样的东西但是没有用。
有什么想法?我现在知道我不应该使用2个单独的表但是我现在坚持使用它。
谢谢。
答案 0 :(得分:2)
我想你只想使用coalesce()
。
ORDER BY COALESCE(punter_surname, punter_checkout_surname)
COALESCE(punter_firstname, punter_checkout_firstname)
其他评论:
DISTINCT
是否必要。为什么这会为单个sale_id
生成多行?COALESCE()
放在SELECT
中,这样您就不会在查询中生成太多名称。答案 1 :(得分:0)
这是我的答案:
ORDER BY
COALESCE( UCASE( punter_surname) , UCASE( punter_checkout_surname ), UCASE( punter_compo_surname ) ) ,
COALESCE( UCASE( punter_firstname ) , UCASE( punter_checkout_firstname ), UCASE( punter_compo_firstname) )