[英]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.