1

我正在我的网站上构建一个搜索系统,用于搜索用户技能,此技能以令牌的形式呈现,用户技能的 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
4

2 回答 2

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)
于 2013-01-14T10:53:34.633 回答
0

您可以使用 mysql 的 GROUP_CONCAT 命令。

这是此命令详细信息的链接

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

希望这可以帮助。

谢谢。

于 2013-01-14T11:01:22.050 回答