我有3NF设计(Tag,Item_Tag,Item)
如下所示,但它无法正常工作,因为我多次循环使用相同的旧cloumn。
我正在尝试使用AND CONDITION获取标记列表。在OR条件下,我只需要做一个whereIn但是有一个AND条件,我迷失了我实际上可以用它去做。
*More explanation*
ItemID TagID
203 45
203 60
203 61
203 62
204 45
204 50
204 51
204 52
假设我正在尝试获取Tag = 45和tag = 60(和条件)的所有ItemID
这是我目前的代码,它无法正常工作。
$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 ...
这是可能的吗?我怎么能做解决方案1& 2与Laravel 4.提前致谢。
答案 0 :(得分:0)
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子句。
如果表格被正确编入索引,那么最好为(select tag_id from tags where (what we want))
创建#tmp表并使用内部联接而不是子查询。