Php 根据是否输入信息对MYSQL中的多个文本字段进行排序

Php 根据是否输入信息对MYSQL中的多个文本字段进行排序,php,mysql,sorting,Php,Mysql,Sorting,我有一个专家表,其中包含的字段有expert\u description,company\u description,expert\u website,expert\u email,company\u website 这些字段不是必需的,因此它们可能是NULL 搜索表时,大多数非空字段的条目应排在第一位 例如,有四个用户: user1:谁为所有5个字段输入了信息 user2:谁只为1个字段输入了信息 user3:谁只为4个字段输入了信息 user4:谁只为3个字段输入了信息 结果应该是 用户1

我有一个专家表,其中包含的字段有
expert\u description
company\u description
expert\u website
expert\u email
company\u website

这些字段不是必需的,因此它们可能是
NULL

搜索表时,大多数非空字段的条目应排在第一位

例如,有四个用户:

  • user1:谁为所有5个字段输入了信息
  • user2:谁只为1个字段输入了信息
  • user3:谁只为4个字段输入了信息
  • user4:谁只为3个字段输入了信息
  • 结果应该是

  • 用户1
  • 用户3
  • 用户4
  • 用户2

  • 我建议您在用户表中创建一个字段,用于存储已填充字段的计数

    每次用户添加/删除字段时,都应更新此列


    然后您只需按“fieldcount”列进行排序。

    如果空字段的值为空,您可以使用类似的方法

    SELECT expert_description, company_description, expert_website, expert_email, company_website, 
    ((expert_description IS NULL) + (company_description IS NULL) + (expert_website IS NULL) + (expert_email IS NULL) + (company_website IS NULL)) AS empty_count 
    FROM experts 
    WHERE 1 
    ORDER BY empty_count;
    
    将返回
    1
    如果字段的值为
    NULL
    ,否则将返回
    0

    使用此查询:

    SELECT user FROM your_table 
    ORDER BY expert_description DESC, company_description DESC, 
    expert_website DESC, expert_email DESC, company_website DESC;
    
    谢谢。

    这对我很有用

    select * from table
    order by if(field = '' or field is null,1,0),field
    

    从@Rossco

    推荐的链接中得到了这个答案。你尝试了什么SQL?我尝试了字段上的字符长度函数,但它没有达到我的预期效果。我可以问一下为什么我的2个声誉点会被扣掉吗。让我知道我的错误,所以我可以在将来处理它。我怀疑你的问题没有任何SQL代码的尝试。Hi @维韦克,你的逻辑是正确的,但它会产生错误,请考虑一些变化:<代码>选择ExtExtDead,Apple Yoad Dead,Excel网站,Excel电子邮件,PosiySyWeb网站((ExtExtType描述为NULL))。+(公司\说明为空)+(专家\网站为空)+(专家\电子邮件为空)+(公司\网站为空))作为专家订单的空\计数按空\计数。只需添加括号并更改订单即可。:)谢谢您的纠正!编辑了我的答案。您又忘记了顺序:)