2014-07-24 74 views
2

我正在使用MYSQL數據庫處理PHP項目。我有一組學生表。每個小組都有一名考官。我想要做的是我想爲每個組隨機設置兩名考官。怎麼做?將數組中的隨機值設置爲數據庫

MySQL代碼:

create table groups (
    groupID    int(10)    not null, 
    nbStudents   int     not null, 
    avgGPA    DOUBLE    NOT NULL, 
    projectName   varchar(50)   not null, 
    advisorID   int,     
    examiner1ID   int,  
    examiner2ID   int, 
    adminID    int     not null, 
    primary key (groupID) 
); 

create table faculty (
    name    varchar(30)   not null, 
    facultyID   int(10)     not null, 
    email    varchar(30)   not null, 
    mobile    int(15)    not null,    
    primary key (facultyID) 
); 

examiner1IDexaminer2ID是從表中的教師外鍵。

+0

修改您的樣本數據和所希望的結果的問題。 –

+0

當你在它的時候拋出一些源代碼 – Deryck

+0

你有Examiners表嗎? –

回答

1

這是一個非常複雜的方式來做到這一點。它使用2個子查詢來挑選教師成員,並使用insert .. on duplicate key來更新考官ID。

insert into groups 
(groupID, examiner1ID, examiner2ID) 
select groupID, 
    @x:=(select facultyID from faculty order by rand() limit 1), 
    (select facultyID from faculty where facultyID <> @x order by rand() limit 1) 
from groups 
on duplicate key update examiner1ID=values(examiner1ID), examiner2ID=values(examiner2ID); 

@xuser-defined-variable。在這種情況下,它被用來存儲第一個隨機的教員。 <> @x確保我們不會在兩個插槽中選擇相同的教員。

由於groupID是一個唯一的鍵,當我們嘗試插入一個具有現有唯一鍵的行時,它將更新現有的行而不是插入它。這就是on duplicate key update子句的用法。對於每個組

設置不同的審查員:

insert into groups 
(groupID, examier1ID, examier2ID) 
select a.groupID, max(if(b.id%2, b.facultyID, 0)), max(if(b.id%2, 0, b.facultyID)) 
from (
    select @row:[email protected]+1 id, groupID 
    from groups a 
    join (select @row:=0) b) a 
join (
    select @row:[email protected]+1 id, facultyID 
    from (
     select facultyID 
     from faculty a 
     order by rand()) a 
    join (select @row:=0) b) b on a.id = ceil(b.id/2) 
group by a.groupID 
on duplicate key update examiner1ID=values(examiner1ID), examiner2ID=values(examiner2ID); 
+0

謝謝。你能解釋一下你剛剛做了什麼嗎?什麼是@x:和<>?重複密鑰是什麼? – hzjw

+0

謝謝老兄。最後一件事。如何爲每個組設置不同的審查員?沒有重複。謝謝。 – hzjw

+0

@hzjw,你的意思是同一個教員不能被分配到多個組? – Fabricator