2015-09-04 149 views
1

考虑我有2个表。 ItemsbidsMysql查询两个表

  • Items: - id(整数),category(整数)。

id范围从1到8,它们是唯一的。在Category,它是图1和2如实施例编号:1至图4是第1类和第5至8是在类别2

  • bids表包含item_id它类似于Items.id,取值范围为1至8个

现在我的查询是,如果我从bids.item_id中选择一个项目,我想看看什么是id在同一类别。

作为例子:如果我在查询 WHERE item_id FROM bids is '2'说,我希望看到同一类,这意味着它应该返回“1”“3”“4”的其他证件的,因为1〜4 items.id在类别= 1

+1

你能先格式化你的问题。 – Rahul

回答

1
select i.* from 
items i where i.category = 
(select i2.category from items i2 join bids b on b.item_id = i2.id and b.id = :INPUTBIDID) 

这将找到与您选择的出价中的项目共享某个类别的所有项目。它通过子查询来完成。所以它在pamentalhesis中进行select(找到正确的类别),并在外部查询的where子句中使用它。

+0

谢谢!我会检查并通知你。 :-) –

+0

它是现货! :-) –

2

我不明白你为什么需要引用bids表,因为bids.item_iditems.id相同。您只需要与某些其他项目在同一类别中的所有项目。你可以用一个简单的自我JOIN做到这一点。

SELECT i1.id 
FROM items AS i1 
JOIN items AS i2 ON i1.category = i2.category 
WHERE i2.id = 2 

如果你确实有一个bid.id,你想找到在同一类别中中标项目中的所有项目,你只需要添加其他加盟:

SELECT i1.id 
FROM items AS i1 
JOIN items AS i2 ON i1.category = i2.category 
JOIN bids AS b ON b.item_id = i2.id 
WHERE b.id = :bidID 
+0

其实竞标表还有其他信息,像bids.user_id,bids.max_bid,bids.date等。所以当我从bids.item_id中选择一个项目时,我想检查同一类别中的其他id是什么! –

+0

投标是他有权访问的(因为人们选择出价),赔率也相当高。在这种情况下,您需要第二次加入投标表(这当然是一个可行的解决方案),这会使这一点变得复杂。 – Astrogat

+0

我已经添加了该查询版本 – Barmar

0

在我看来,有有两种可能的解决方案:

1.您的类别不会改变

在你的问题,你提到塔只有两种可能的类别:1和2,并且它们完全依赖于物品ID。 这会一直这样吗?那么答案很简单:

SELECT id FROM items WHERE items.category = {1 or 2 depending on which item was selected} AND items.id <> {id from selected item} 

2.您的类别可能会在未来

SELECT id FROM items WHERE items.category = (SELECT items.category FROM items, bids WHERE items.id = bids.item_id) 

这是否帮助改变一个一天?