我们需要在PHP / MySQL中创建一个程序,它将显示所有'人',他们在活动期间可能需要某些技能。每个人至少具有一项技能并且评分为1-5,这取决于该人对特定技能的熟练程度。例如,约翰有两种技能 - 绘画和绘画。他是绘画方面的专家,所以他对绘画的评价为5,而绘画的评分仅为2,因为他可以画画但不是很好。
管理员可以添加一些事件,其中包含该特定事件所需的技能。每个活动将包含仅一到八种不同技能的技能。例如,用户将创建一个名为Art Class Tutorial的事件,然后从预定义技能(由程序提供)中选择需要哪些技能。例如,在这种情况下,管理员选择雕刻,绘图和绘画。接下来,管理员需要找到具有雕刻或绘图或绘画技能的所有“人”(以便他们可以参加活动中的教学),其中评级不应低于3。
在这种情况下,约翰应该被展示,因为即使他的绘画只是2星级,他也有5星级的绘画评级。例如,如果Bob有雕刻,绘画和绘画,但所有人都有2星评级,则不应显示Bob。
所以我的问题是:我怎么能为此创建一个查询,因为该程序不知道事件需要多少技能以及选择哪些技能?对于我来说,组合各种可能性组合的可能性太多了。
顺便说一句,在我的表中,每个'人',都有八个领域(每个技能一个),每个技能应该包含每个技能等级。等级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;
答案 0 :(得分:1)
只需这样做:
WHERE
条件希望它很清楚,并会帮助你
编辑(根据问题的作者请求)
中间实体是必须在两个实体之间存在n / m关系时创建的“特殊”实体(或表,如果您愿意以这种方式引用那些实体)。所以,如果'event'和'技能'有基数(并且它们有!)你必须创建一个表(比如r_event_skills),其中'r_event_skills'的PK由两个外键的组合组成(一个是约束于事件的PK,另一个约束于技能的PK)。 现在,你必须为技能/人重复同样的事情,然后就完成了诀窍。
答案 1 :(得分:1)
希望有所帮助
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
答案 2 :(得分:0)
根据更新的问题更新:
我会创建一个包含5个表的数据库:
管理员可以在Event表中创建一个Event。然后,他创建EventSkillsRequired记录,其中包含事件ID和事件所需的技能ID之一。
您需要创建一个接受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}
答案 3 :(得分:0)
假设您有3个实体;
•'people',其中包含姓名,联系方式等基本信息
•'技能'列出了8种不同的技能
•'peopleskill'作为两者之间的联系,附加属性'Rating'显示他们对相关技能的熟练程度。
所以你可以拥有人民的技能,例如:
PERSON SKILL RATING
1 1 5
1 2 2
等等。我想象的代码就像这样。
$result = mysql_query=("SELECT * FROM peopleskill WHERE Skill_ID = $optionone OR $optiontwo OR $optionthree");
while($row=mysql_fetch_array($result)){
$personid = $row['Person_ID'];
$rating = $row['Rating'];
if($rating=>3){
$result2 = mysql_query("SELECT * FROM people WHERE Person_ID = $personid");
while($row2=mysql_fetch_array($result2)){
echo $row2['First_Name'];
}
}
}
对于这篇文章的布局抱歉,我不知道如何对这种格式进行排序,但希望你明白我的意思。