繁体   English   中英

3NF 数据库设计(和条件)

[英]3NF database design ( And Conditions )

我有一个 3NF 设计(Tag、Item_Tag、Item)

如下所示,但它不起作用,因为我多次循环同一个旧的cloumn。

我正在尝试使用 AND 条件实现标签列表。 在 OR 条件下,我只需要做一个 whereIn 但在 AND 条件下,我不知道如何真正开始使用它。

*More explanation*

ItemID TagID

203     45
203     60
203     61
203     62

204     45
204     50
204     51
204     52

假设我正在尝试获取所有 ItemID Where Tag = 45 and tag = 60(And Condition)

这是我目前的代码,它不会工作。

  $itemID = DB::table('item_tag')
                     ->where(function($query) use($ID)
                     {
                         foreach($ID as $uID){
                             $query->where('tag_id', '=', $uID);
                         }
                     })->lists('item_id');

潜在解决方案 1

select * from question q inner join 
question_has_tag qt where tag_id in 
(select tag_id from tags where (what we want) 
minus select tag_id from tags where (what we don't)

潜在解决方案 2

SELECT * FROM items WHERE  
    EXISTS (SELECT 1 FROM item_tag WHERE id = item_id AND tag_id = tag1)  
    AND EXISTS (SELECT 1 FROM item_tag WHERE id = item_id AND tag_id = tag2)  
    AND ...

这可能吗?我如何才能使用 Laravel 4 执行解决方案 1 和 2。提前致谢。

select * from question q 
inner join question_has_tag qt 
    ON ...
where tag_id in (select tag_id from tags where (what we want)) 
    AND tag_id NOT IN (select tag_id from tags where (what we don't))

我认为这是您正在寻找的逻辑,请注意缺少的 ON 子句。

如果表被正确索引,你可能会更好地创建一个#tmp 表(select tag_id from tags where (what we want))并使用内部连接而不是子查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM