1

Web サイトでユーザー スキルを検索する検索システムを構築しています。このスキルはトークンとして表示されます。ユーザー スキルのデータベース テーブルは次のようになります。

 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

したがって、2 つのスキル (またはそれ以上) が 1 人のユーザーに属している場合、表示は次のようになります。

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

私が現在理解しているように、これはデータモデルの問題です。

中心的な質問は、データモデルがサポートしなければならないユースケースと、その一部として、基礎となるクエリがどれほど効率的でなければならないかです。

スキルのセットが非常に限られており、非常に高いパフォーマンスが必要な場合は、スキルセットが実際にビットセットとして表されるソリューションを選択することをお勧めします。

明確なユーザーインターフェイスと明確なデータモデルが主な目的であり、パフォーマンスが潜在的に二次的に重要である場合、頭に浮かぶアプローチは、1つのテーブルに個人のコアデータを含むリレーショナルデータモデルを持ち、2番目のテーブルにスキルを割り当てることです。 :

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 に答える