2012-01-24 22 views
0

私は次のプロジェクトで何をする必要があるかをもっとよく理解しようとしています。仮想マージグループを作成する

私は3 dbテーブルを持っています。

t1 (book) 
----------- 
id 
project_id 
label 


t2 (box) 
----------- 
id 
project_id 
creator_id 
label 

t3 (how they relate to each other) 
----------- 
id 
box_id 
book_id  
project_id 
user_id 

t1.id = t3.boo_id 
t2.id = t3.box_id 
t2.creator_id = t3.user_id 

書籍はボックス内に配置することができ、ボックスにはラベルが付けられます。私のスクリプトは箱ごとの本の総数をカウントしています。異なるユーザーが同じ書籍を箱に入れて別々の名前を付けるが、閉じるまではうまくいく。 雑多その他その他:

私は私のようないくつかの類似した箱のラベルを、選択できる「仮想マージ」のいくつかの並べ替えを実装できるようにしたいと思います。、自分のラベルを割り当てて、MISCとし、この3つのボックスの書籍がこの新しいものの中に入っているかのようにスクリプトで扱います。

これを行う方法はわかりません。私はそれらを永久に併合したくありません。最終的に、マージされたグループからいくつかの「ボックス」を削除し、スクリプトが合計を再計算する機能を追加します。

私は新しいテーブルを追加する必要があると思う:この

SELECT id, label 
FROM t1 
WHERE project_id = $project_id 
ORDER BY id 

と合計などの

SELECT id, label 
FROM t2 
WHERE project_id = $project_id 
ORDER BY id 

冊:

t4 
---------- 
id 
box_id 
label 

現在、私のスクリプトは、このようなボックス情報をつかみますこのように数えます

SELECT COUNT(DISTINCT user_id) AS cnt 
FROM t3 
WHERE project_id = $project_id 

"マージされたグループ"が存在する場合とそうでない場合のクエリを書き直すにはどうすればよいですか?

+0

のようなものが含まれるかもしれないと思いますあなたはt3で重複した情報を持っているようですが、単一のプロジェクトおよび作成者(t2ごと)に属しているように見えます。これにより、project_idおよびuser_idがt3で冗長化されます。 – Dancrumb

+0

t3には、t1の本がt2のボックスにどのように関連しているかという情報のみが含まれています。基本的には、どの本にどのユーザがどの書籍を置いたのか。 t3は管理者によって使用され、トータルですべてのトランザクション履歴を見ることができます。 t2データはユーザーによって作成されます。 – santa

答えて

0

ユーザーは、何らかのタイプのフォームなどで自分のラベルを記入していますか? id、box_id、ラベル(s、およびテキストフィールド)を設定することで、あなたが言っていたことをお勧めします。受け入れ可能なラベル名をすべてラベル列に格納する(つまり、ボックスID 1は、新しいテーブルbox_id = 1、labels = "misc、miscellaneous、misc。、extra、other、unknownのユーザが新しいラベルを作成したときに、すべてのボックスで使用可能なすべてのラベルと相互参照します。一致するものがあれば、テーブルから正確なbox_idを取り出します。本はこのボックスに入れているように、適切なボックスには、彼らは自分の箱に入れ、その後、マージさしようとしているではないの後に、だろう。

私はそれが私はこの

$box_label = $_POST['label']; 

$getrelatedboxes = mysql_query("SELECT box_id, MATCH(labels) AGAINST('$box_label' IN BOOLEAN MODE) AS relation FROM newtable HAVING relation > 0 ORDER BY relation DESC LIMIT 1"); 
$related_boxes = mysql_num_rows($getrelatedpages); 

if($related_boxes){ 

$box_id = mysql_fetch_assoc($getrelatedboxes); 

// insert books into that box 

} 
else { 
// create new label and insert those books into that box 
}