2016-10-08 17 views
0

假設我有波紋管查詢:Mysql如何獲取子查詢的列名?

SELECT 
    c.id AS 'course_id',u.id as 'user_id',c.round,u.first_name as name,u.last_name as family_name,u.`father_name`,u.`tazkera_id` as tazkira,c.`no` as class_ID,tc.province,tc.village,tl.id as training_provider_id, 
    CASE c.`shift` 
     WHEN 1 THEN 'Morning' 
     WHEN 2 THEN 'Afternoon' 
    END as shift, 
    c.`start_date`as start_date, 
    sa.participant_id, 
    DATE_FORMAT(ca.`date`,'%Y-%m-%d') as attendence, 
    CASE sa.`precence` 
     WHEN 0 THEN 'A' 
     WHEN 1 THEN 'P' 
    END as attendence_status 
FROM `users` AS u 
LEFT JOIN `provinces` as pu On pu.`province_code` = u.`province_code` 
LEFT JOIN `districts` as du on du.`district_code` = u.`district_code` 

LEFT JOIN `course_user` as cu ON cu.`user_id` = u.id AND cu.`relation_type` = 1 
LEFT JOIN `courses` AS c On c.id = cu.`course_id` 


LEFT JOIN `training_centers` as tc On tc.id = c.`training_center_id` 
LEFT JOIN `training_providers` AS tl ON tl.id = tc.`training_provider_id` 
/*** Training location **/ 
LEFT JOIN `provinces` as pt On pt.`province_code` = tc.`province` 
LEFT JOIN `districts` as dt on dt.`district_code` = tc.`district` 
LEFT JOIN `course_attendances` as ca ON ca.`course_id` = c.`id` 
LEFT JOIN `student_attendances` as sa ON sa.`course_attendance_id` = ca.`id` 

WHERE c.id IS NOT NULL AND sa.`participant_id` = u.id 
GROUP BY sa.`participant_id`,ca.date order by u.id,ca.date 

我想利用上述查詢的列名與MySQL。 當然用PHP我們可以做到這一點,但我的問題是,如何做到這一點與MySQL查詢?可能嗎 ?

+1

您正在給您選擇的大部分內容提供別名,因此您不知道結果集中列的名稱? –

+0

@TimBiegeleisen我有很多這樣的其他查詢,我使用它作爲drodown中的表名,別名'src',當用戶選擇它時,我應該運行它的相關查詢,並獲取所有列名以在另一個下拉列表中顯示它用戶列表。 – jones

+1

只需對您的查詢進行一些說明:對別名使用雙引號;單引號用於字符串文字。你加入了很多你不用在結果中的表格('省份','區域',兩個表格甚至兩次,以及表格'training_providers',你只需使用'id',你可以用'training_centers.raining_provider_id已經)。爲什麼?你也試圖外連接所有的表。這是故意的嗎?它似乎沒有道理,它甚至不起作用,因爲你在where子句中解除了外部連接的記錄。 '在哪裏c.id不是NULL'?一個表的ID如何可以爲空? –

回答

0

MySQL只是數據庫系統。你告訴它選擇什麼,它是這樣做的。在你的情況下,你告訴它選擇courses.id並稱之爲course_id等等。列名隱含在結果中。這就像這樣工作:你的應用程序發送查詢到MySQL; MySQL檢查它並告訴你它是否可以。你的應用程序要求列; MySQL會告訴你列名和類型。你的應用程序要求行; MySQL發送它們。

通常你會使用一個自動完成所有操作的應用程序,比如phpMyAdmin。當你自己編寫這樣一個應用程序時,這種語言經常會隱藏你的這一切(比如Java框架或者.NET)。當然,你也可以明確地詢問列名和類型,例如在PHP中:

mysqli_fetch_field_direct($result, $column_index) 

你可能會通過簡單的搜索「MySQL的」 + <問題> +「列名」的語言找到如何做到這一點的許多信息。

+0

是的,用'PHP'這樣的語言我們可以做到這一點,我已經提到過。我問過是否可以用mysql或不用?謝謝我會用'PHP'做它 – jones

+0

MySQL只是數據庫管理系統,就是機器。就好像你想在你的計算機上觀看互聯網網站一樣,我告訴你可以使用Internet Explorer或Firefox或自己編寫一個工具,並且你問:「是的,我知道Firefox可以做到,但可以互聯網也這樣做?「。 –