【问题标题】:How to sort data according to value of data in descending order如何按照数据的值降序排列数据
【发布时间】:2013-06-10 23:25:55
【问题描述】:

我想写几个 mysql 查询来从 mysql 数据库中检索数据。

如果我解释问题,数据库表中有 136 列。表用于存储学生的信息和他们的技能类别。大约有 6 个主要类别和所有 136 个子类别。如果主类别是数学,则有应用数学、纯数学等子类别。所有信息都包含在一个表格中,并且没有归一化。

学生的技能水平从 1 到 5 进行测量。 5 是最大值。如果我将学生姓名传递给 mysql 查询,我想按降序打印他的主要类别和子类别。请注意,任何学生都可以关注多个主要类别。

Last Name       Web technologies - HTML Web technologies - CSS  Web technologies - XML  Web technologies - JavaScript   Web technologies - J-Query  ......
Bill            3   1   4   na  na  1   3   na  na  na  na  na  na  na  na  na
Arun            1   5   1   3   1   2   1   na  na  3   1   5   1   1   na
Soma            na  na  na  na  na  na  na  na  na  na  na  na  na  na  na  na

如果我选择 Arun,我想将技能等级显示为 5 5 3 3 3 1111111 和相应的技能类别。

【问题讨论】:

  • 如果您提供示例数据(不是全部 100 多列,只是其中的几个),以及您期望得到什么,它将帮助大家理解您的问题
  • 您可以使用sqlfiddle.com创建一个虚拟数据集,这样我们提供解决方案会容易得多
  • 什么类型的“降序”,按技能水平、时间顺序、字母顺序?我知道您是 SO 新手,但要获得具体答案,我们需要一个具体问题,请提供一个小型数据集和您尝试过的任何相关代码。
  • 这是一个非常可怕的架构设计。您应该使用包含student_idskill_idskill_level 列的表。
  • 您将数据存储在数据库结构中,现在您需要进行数据透视查询。 stackoverflow.com/questions/6605604/…恕我直言,您应该认真重新考虑您的架构。

标签: mysql


【解决方案1】:
SELECT *
FROM (SELECT "Web Technologies HTML", skill_web_html skill_level
      FROM student_skills
      WHERE student_id = @id
      UNION
      SELECT "Web Technologies CSS", skill_web_css
      FROM student_skills
      WHERE student_id = @id
      UNION
      ...
      SELECT "Web Technologies J-Query", skill_web_jquery
      FROM student_skills
      WHERE student_id = @id
      UNION
      ...) all_skills
ORDER BY skill_level DESC

【讨论】:

  • 如果我从 mysql 查询中选择所有数据集并使用编程语言处理它来排序、过滤数据怎么办?我认为你所接受的很好,但需要时间,因为我必须处理关系的每一个属性。
  • 这是一个很好的解决方案。使用 PHP sort() 函数应该很容易做到。
猜你喜欢
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多