php中不同类型的不同排序

php中不同类型的不同排序,php,mysql,sorting,Php,Mysql,Sorting,我的表格说明如下 **entry_table** - serial(int) - s_name(varchar) - user_id(int) - id(int) **Students_details** - id(int) - user_id(int) - student_name(varchar) - adress(varchar) **User_login** - user_id(int) - user_name(varchar) - password(va

我的表格说明如下

**entry_table**

 - serial(int)
 - s_name(varchar)
 - user_id(int)
 - id(int)

**Students_details**

 - id(int)
 - user_id(int)
 - student_name(varchar)
 - adress(varchar)

**User_login**

 - user_id(int)
 - user_name(varchar)
 - password(varchar)
 - alotment(bool)
场景是学生申请多项奖学金。他们的选择存储在entry_表的_name、user_id和id字段中

我的下一步是建立一个分类列表,列出所有申请奖学金的学生,例如:“奖学金1”

此列表还应显示学生姓名(学生详细信息表的学生姓名字段)

名单将根据系统提供的两种奖学金类型(优点和需要)进行排序。优异奖学金的申请者需要按照比例(获得分数/总分)按降序排列。然而,需要奖学金按升序缩短,因为它使用了比率(家庭收入/非收入家庭成员人数)

我试着使用

  $query = "SELECT *FROM entry_table, students_details 
WHERE entry_table.id=students_details.id
    group by entry.s_id,entry.student_id";
请帮助按类型问题进行排序。此外,上面的查询有助于连接表,但没有达到目的


提前感谢您

首先,您应该正确连接表格

select * from entry_table inner join students_details on entry_table.id=students_details.id order by entry.student_id asc;
$query = "SELECT sd.student_name, et.s_name FROM Student_details AS sd LEFT JOIN 
entry_table AS et ON et.user_id = sd.user_id LEFT JOIN 
user_login AS ul ON ul.user_id = sd.user_id 
WHERE et.s_name = 'merit'
ORDER BY et.s_name DESC 
UNION ALL 
SELECT sd.student_name, et.s_name FROM Student_details AS sd LEFT JOIN 
entry_table AS et ON et.user_id = sd.user_id LEFT JOIN 
user_login AS ul ON ul.user_id = sd.user_id 
WHERE et.s_name = 'need'
ORDER BY et.s_name ASC"
如果需要列表,则不需要分组,只要不需要任何字段或唯一行上的计数。 这就是我脑子里想的,也许做我没有测试过的把戏,但也许给你一个想法。 我看不到您表上的比率字段

在连接表的地方使用Join,这样更有意义并提高查询性能。 下一次,放SQL表代码,对于给出更好的响应更有用


对不起我的英语

请注意,从由WHERE子句连接的多个表中进行选择是“老式”的方法。你可能想看看JOIN-ONs。我不确定它是否“过时”,但它已经过时了!此外,在没有任何聚合函数的情况下,使用GROUPBY子句是不合适的。除此之外,您的设计似乎存在根本缺陷。你应该有一个学生表,一个奖学金表,以及一个相互关联的表。每个奖学金都有“需要”和“优点”类型吗?申请其中一个的学生不能申请另一个吗?请补充一些解释。