Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何为2个表订购左联接_Mysql_Sorting - Fatal编程技术网

Mysql 如何为2个表订购左联接

Mysql 如何为2个表订购左联接,mysql,sorting,Mysql,Sorting,我(经过荒谬的反思)将我们的“赌客”存储在两个表中,这取决于他们是通过快速结账表注册还是付款 我的SQL如下所示: SELECT DISTINCT(sale_id), sale_punter_type, sale_comment, sale_refund, sale_timestamp, punter_surname, punter_firstname, punter_checkout_surname, punter_checkout_firstname,

我(经过荒谬的反思)将我们的“赌客”存储在两个表中,这取决于他们是通过快速结账表注册还是付款

我的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个相连的排序列表中

我想也许我可以用类似“赌客”的姓氏作为“赌客”的姓氏,但那没用

有什么想法吗?我现在知道我不应该使用两张单独的桌子,但我现在坚持使用它


谢谢。

我想您只想使用
coalesce()

ORDER BY COALESCE(punter_surname, punter_checkout_surname)
         COALESCE(punter_firstname, punter_checkout_firstname)
其他意见:

  • 我怀疑是否有必要使用
    DISTINCT
    。为什么这会为一个
    sale\u id
    生成多行
  • 当查询有多个表时,请限定所有列名(即,包括表别名,以便您和其他人知道表的来源)
  • 您的数据有三组名称。这似乎太过分了
  • 您可能希望将
    COALESCE()
    放在
    SELECT
    中,这样查询生成的名称就不会太多
    • 以下是我的答案:

      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) )
      

      为什么在
      saleid
      周围有括号?您是否将
      选择DISTINCT
      与某个带有参数的函数混淆?请注意,DISTINCT适用于列列表中紧跟其后的所有列;因此,在这种情况下,您将获得
      sale\u id
      sale\u punter\u type
      sale\u comment
      sale\u return
      sale\u timestamp
      punter\u firstname
      punter\u checkout\u firstname
      punter\u checkout\u firstname>,
      punter\u compo\u姓氏
      punter\u compo\u名字
      sale\u随机
      sale\u扫描
      ,以及
      sale\u id
      。这可能不是你想的。谢谢你,鲍勃,这很有道理——我不知道!我已经删除了,你是对的,这是没有必要的。COALESCE不起作用,它返回的记录比我预期的要少。我读过关于COALESCE的文章,但仍然不太理解它&当然不理解它如何帮助我解决这个问题。起初我以为它会连接我的结果,但似乎没有。对不起,我怀疑你。它确实起作用了,但我必须做一些调整才能让它正常工作。