创建虚拟合并组

时间:2012-01-24 21:06:26

标签: mysql

我正在努力更好地了解我需要为下一个项目做些什么。

我有3个数据库表。

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。,指定我自己的标签,说出 MISC 并让脚本对待它,好像这3个方框中的书都在这个新书中。

不确定如何做到这一点。我不想永久合并这些。我最终会添加一项功能,从合并的组中删除一些“盒子”,并让脚本重新计算总数。

我想我需要添加一个新表:

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

目前我的脚本抓住了这样的信息:

SELECT id, label
FROM t2
WHERE project_id = $project_id
ORDER BY id
像这样的书

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

和这样的总计数

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

如果可能有或没有“合并组”,我将如何重写查询?

1 个答案:

答案 0 :(得分:0)

因此,用户会以某种形式填写自己的标签?我会建议你创建一个新的表设置:id,box_id,标签(带有s,作为文本字段)。将所有可接受的标签名称存储在标签列中(因此,对于您要添加到新表格中的所有其他类型的框,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
}