Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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
Php MYSQL order by-遵循一种模式_Php_Python_Mysql_Sql_Sql Order By - Fatal编程技术网

Php MYSQL order by-遵循一种模式

Php MYSQL order by-遵循一种模式,php,python,mysql,sql,sql-order-by,Php,Python,Mysql,Sql,Sql Order By,我们如何设置模式,以便将结果选择或保存在变量中 因此,基本上,当我选择数据时,它的顺序如下所示 customer ID Email 1 test@gmail.com 2 test@hotmail.com 3 test@yahoo.com 4 test@seznam.cz 所以我

我们如何设置模式,以便将结果选择或保存在变量中

因此,基本上,当我选择数据时,它的顺序如下所示

customer ID               Email
1                         test@gmail.com
2                         test@hotmail.com
3                         test@yahoo.com
4                         test@seznam.cz
所以我想选择表中的所有记录!但是,我想订购它们,以便它们遵循此格式

customer ID               Email
1                         test@gmail.com
2                         test@hotmail.com
3                         test@yahoo.com
4                         test@seznam.cz
52                        test2@gmail.com
7                         test2@hotmail.com
84                        test2@yahoo.com
99                        test2@seznam.cz
10                        test3@gmail.com
11                        test3@hotmail.com
124                       test3@yahoo.com
1321                      test3@seznam.cz
那么,我如何设置查询以使结果遵循类似的顺序呢。我基本上想知道如何从数据库中选择(或存储后处理)数据以遵循特定模式

编辑:

这是我正在尝试的脚本,它确实部分工作,但是数据不符合模式

SELECT DISTINCT customer_id, email
FROM customer_1_tbl
WHERE customer_id IN (
    SELECT cust.customer_id 
    FROM customer_1_binding_tbl AS cust 
    WHERE cust.mailinglist_id = '2') order by substring_index(email, '@', 1),
     (case substring_index(email, '@', -1)
          when ('gmail.com' or 'hotmail.com' or 'jednotavimperk.cz') then 1
          when ('seznam.cz' or 'email.cz' or 'post.cz') then 2
          when 'tiscali.cz' then 3
          when ('centrum.cz' or 'atlas.cz' or 'volny.cz') then 4
          else 999
      end)

您可以将
电子邮件
列分开。然后,使用
案例
分配订购优先级:

order by substring_index(email, '@', 1),
         (case substring_index(email, '@', -1)
              when 'gmail.com' then 1
              when 'hotmail.com' then 2
              when 'yahoo.com' then 3
              when 'seznam.cz' then 4
              else 999
          end)
另一个方便的函数是
field()
。但是,对于非匹配项,它并没有为您提供简单的
else
子句选项

编辑:

您编辑的代码是错误的。这不是在
案例中表达多个条件的方式。试试这个:

order by substring_index(email, '@', 1),
         (case when substring_index(email, '@', -1) in ('gmail.com', 'hotmail.com', 'jednotavimperk.cz') then 1
               when substring_index(email, '@', -1) in ('seznam.cz', 'email.cz', 'post.cz') then 2
               when substring_index(email, '@', -1) = 'tiscali.cz' then 3
               when substring_index(email, '@', -1) in ('centrum.cz', 'atlas.cz', 'volny.cz') then 4
               else 999
          end)

定义排序的模式是什么?电子邮件域。例如,首先是gmail、yahoo、seznam……然后重复,直到所有的电子邮件都像这样被订购@Gordonlinoff您可以使用MySQL exp:
通过电子邮件REGEXP'[a-z]'订购DESC
No,但这不起作用。它留下了一个非常不寻常的秩序,但它与模式无关。@invincible.superman。设置SQL小提琴。这似乎完全符合你的要求,但我的问题是它不符合这个顺序。特别是我的电子邮件地址的规模…我编辑了我的评论,向你展示我在使用什么@Gordonlinoff你的
案例陈述和我的一模一样。我建议你把它修好。