2013-11-27 76 views
0

我的表說明如下鮮明的排序

**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_table的s_name,user_id和id字段中。

我的下一步是建立一個所有申請特定獎學金的學生的排序列表,例如:「獎學金1」。

這一清單還應顯示學生的姓名(在students_details表student_name場)

的名單是根據兩種類型的獎學金進行排序,該系統提供(價值和必要性)。優秀獎學金的申請者需要使用比例(獲得的分數/總分數)以降序排列。但是,需要獎學金是按升序短路,因爲它使用的比例(家庭收入/無。無收入的家庭成員)

我嘗試使用

$query = "SELECT *FROM entry_table, students_details 
WHERE entry_table.id=students_details.id 
    group by entry.s_id,entry.student_id"; 

請幫助加入我的表按照類型問題進行排序。另外上面的查詢有助於加入表格,但不能達到目的。

,請多關照

+0

請注意,從WHERE子句連接的多個表中進行選擇是以「老式」方式來執行此操作的。你可能想看看JOIN ONs。 – Aquillo

+0

我不確定它是「老式」,但它不合時宜!另外,在沒有任何聚合函數的情況下,使用GROUP BY子句是不合適的。除此之外,你的設計似乎從根本上有缺陷。你應該有一張學生表,一張獎學金錶和一張相互關聯的表格。 – Strawberry

+0

每個獎學金都有與之相關的「需要」和「優點」兩種類型嗎? *和*是否申請一個申請另一個的學生? – Strawberry

回答

1
select * from entry_table inner join students_details on entry_table.id=students_details.id order by entry.student_id asc; 
+0

請添加一些解釋。 – DontVoteMeDown

0

必須先連接表的第一件事。

$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" 

如果您需要一個列表,您不需要進行分組,只要您不需要任何字段或唯一行上的計數編號。 這就是我的頭頂,也許是我沒有測試過的技巧,但也許給你一個想法。 我看不到表格中的比率字段。

使用連接而不是在哪裏連接表,更有意義並提高查詢性能。 下一次,把SQL表代碼放在一個更好的響應中會更有用。

對不起,我的英語!