用于搜索用户令牌的SQL查询(技能)

时间:2013-01-14 10:40:35

标签: php jquery mysql jquery-tokeninput

我正在我的网站上构建一个搜索系统来搜索这些技能作为标记呈现的用户技能,用户技能的db表如下所示:

 id=> primary id(auto increment), 
user_id=> this is the user id,  
competence_nom=> this is the skill name, 
competence_id=> this is the skill parent id

所以我想要的是当两个技能(或更多......)属于一个用户时,显示如下:

user name + skill one + skill two

而不是这样(我现在正在实现的目标)

user name +skill one
user name +skill two

我使用jQuery tokeninput插件将令牌数据传递到服务器端,我将技能ID传递给服务器端,然后在服务器端我爆炸jQuery tokeninput给出的技能数组:

 $comps=explode(",", $_POST["competences"]); 

然后我把它放在foreach循环中:

 foreach($comps as $i=>$v){  


}

这就是我输出错误的地方:

user name +skill one
    user name +skill two

2 个答案:

答案 0 :(得分:0)

正如我目前所理解的那样,这是您的数据模型的问题。

核心问题是您的数据模型需要支持的用例,以及作为其中一部分的基础查询的效率。

如果您的技能非常有限并且需要非常高的性能,那么您可能希望找到一个技能组实际上表示为位集的解决方案。

如果明确的用户界面和清晰的数据模型是主要目标,并且性能可能是次要的,那么一个人想到的方法是在一个表中建立人员核心数据的关系数据模型,在第二个表中分配技能,像这样:

TABLE person
id: (auto increment)
name: (or split into first name etc)
email: (etc, you get the idea)

TABLE skill
id: (auto increment)
description:

TABLE personskill
personid: (reference to person.id)
skillid: (reference to skill.id)

然后,通过关系数据库查询,系统将回答哪些技能被分配给哪个人的问题。

SELECT skillid FROM personskill WHERE personid = (id of person you're looking at)

答案 1 :(得分:0)

您可以使用mysql的GROUP_CONCAT命令。

以下是此命令详细信息的链接

http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php

希望这有帮助。

感谢。