我面臨着以下的問題,涉及三個表
class_sectors
表包含三種類型的類
classes
表中包含一個學生可參加的班級列表
class_choices
包含第一,第二和第三班的選擇學生,每個部門。因此,對於部門1 Student_A已class_1作爲第一choihce,class_3作爲第二選擇和class_10,例如第三個選擇,然後扇區2他還有三種選擇,等等。
的class_choices
表中有這些列:
kp_choice_id | kf_personID | kf_sectorID | kf_classID | preference | assigned
我認爲列名是不言自明的。 preference
是1,2或3.並且assigned
是一個布爾值,設置爲1,一旦我們檢查了學生的選擇並將它們分配給一個班級。
問題:
寫一個SQL查詢,告訴他們被分配到每個部門有什麼類的學生。如果他們的班級沒有被分配,它應該默認顯示他們的第一選擇。
其實我已經得到了這個工作,但使用兩(很臃腫?)的SQL查詢如下:
$choices = $db -> Q("SELECT
*, concat_ws(':', `kf_personID`, `kf_sectorID`) AS `concatids`
FROM
`class_choices`
WHERE
(`assigned` = '1')
GROUP BY
`concatids`
ORDER BY
`kf_personIDID` ASC,
`kf_sectorID` ASC;");
$choices2 = $db -> Q("SELECT
*, concat_ws(':', `kf_personID`, `kf_sectorID`) AS `concatids`
FROM
`class_choices`
WHERE
`preference` = '1'
GROUP BY
`concatids`
HAVING
`concatids` NOT IN (".iimplode($choices).")
ORDER BY
`kf_personID` ASC,
`kf_sectorID` ASC;");
if(is_array($choices2)){
$choices = array_merge($choices,$choices2);
}
現在$choices
確實有我想要的東西。
但我敢肯定,有一種方法可以簡化這一點,合併兩個SQL查詢,所以它更輕量一些。
是否有某種有條件的SQL查詢可以做到這一點???
啊,顯而易見!!!感謝您花時間思考。優秀的答案。 – Emmanuel 2013-03-13 20:45:47
非常歡迎您,在灰色的細胞中鍛鍊身體! – 2013-03-13 20:46:37
哈哈,是的,當然! – Emmanuel 2013-03-13 20:47:13