我们需要在PHP/MySQL中创建一个程序,该程序将显示所有的‘人’,谁有一定的技能,可能需要在一个事件。每个人至少有一项技能,评分为1-5,这取决于该人对特定技能的熟练程度。例如,约翰有两项技能--绘画和绘画。他是绘画专家,所以他的绘画评分是5分,而绘画评分只有2分,因为他会画画,但不是很好。
管理员可以添加一些事件,其中包含特定事件所需的技能。每个活动将只包含一到八种不同技能的技能。例如,用户将创建一个名为Art Class Tutorial的事件,然后从预定义的技能(由程序提供)中选择需要哪些技能。例如,在这种情况下,管理员选择Sculpting、Drawing和Painting。下一步,管理员将需要找到所有具有雕刻或绘画或绘画技能的“人”(以便他们可以参与该活动的教学),其中评分不应低于3。
在这种情况下,应该显示John,因为他的绘画评级为5星,即使他的绘画只有2星。例如,如果Bob有雕刻、素描和绘画,但所有这些都有2星级的评级,则Bob不应显示。
所以我的问题是:既然程序不知道事件需要多少技能以及选择了哪些技能,我如何为此创建查询?可能性的组合对我来说太多了,我无法为每个可能的组合创建if。
顺便说一句,在我的表中,对于每个“人”,存在八个字段(每个技能一个),其中应该包含每个技能的每个技能评级。评分为0表示不具备该领域的技能。
下面是我的当前代码:
function search_results($keywords){
$returned_results = array();
$where = "";
$keywords = preg_split('/[\s]+/', $keywords);
$total_keywords = count($keywords);
foreach($keywords as $key=>$keyword){
$where .= "`keywords` LIKE '%$keywords%'";
if($key != ($total_keywords - 1)){
$where .= " AND ";
}
}
$results = "SELECT `title`, LEFT(`description`, 70) as `description` , `url` FROM `articles` WHERE $where";
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results): 0;
if($results_num === 0){
return false;
}else{
while($results_row = mysql_fetch_assoc($results)){
$returned_results[] = array(
'title' => $results_row['title'],
'description' => $results_row['description'],
'url' => $results_row['url']
);
}
return $returned_results;
发布于 2012-02-16 16:21:48
简单地做到这一点:
在数据库中创建一些实体,如: event,skill,people.
WHERE
is done希望这篇文章能对你有所帮助。
编辑(在问题的作者请求下)
中间实体是“特殊的”实体,当你在两个实体之间有n/m的关系(或者表格,如果你愿意以这种方式引用那些实体)时,必须创建这些实体。所以,如果'event‘和'skills’有一个m/n的基数(它们确实有!)您必须创建一个表(比方说r_event_skills),其中'r_event_skills‘的PK由两个外键的组合组成(一个约束到event的PK,另一个约束到skill的PK)。现在,你必须对技能/人员重复同样的操作,这个技巧就完成了。
发布于 2012-02-16 17:17:33
希望能有所帮助
People's table
People_id People_name
skill's table
skill_id skill
listing table
people_id skill_id rating
然后,对于每个事件
select people_name from people where people_id in
(SELECT people_id FROM listing WHERE
skill_id in (8,9,10) and (rating >=3 or rating =5) order by rating desc)
limit `NOpersonRequired
发布于 2012-02-16 16:25:46
根据更新的问题进行了更新:
我将创建一个包含5个表的数据库:
Event事件人员(包含peoples)
(包含由admin)
管理员可以在事件表中创建事件。然后,他使用事件id和事件所需的技能id之一创建EventSkillsRequired记录。
您需要创建一个接受eventid的php页面。下面的查询返回事件所需的至少有一项技能且技能得分大于3的所有人员。
SELECT People.firstname, People.lastname, Skills.name, Skills.score FROM People
INNER JOIN PeopleSkill ON PeopleSkill.peopleid = People.peopleid
INNER JOIN Skills ON Skills.skillsid = PeopleSkill.skillsid
INNER JOIN EventSkillsRequired ON EventSkillsRequired.skillid = Skills.skillsid
WHERE PeopleSkill.score > 3 AND EventSkillsRequired.eventid = ${php evenid parameter}
https://stackoverflow.com/questions/9307695
复制相似问题