两个表的Mysql查询

两个表的Mysql查询,mysql,Mysql,我有两张桌子。项目和投标 项目:-id整数,类别整数。 id的范围从1到8,并且它们是唯一的。在类别中,它是1和2,例如id:1到4在类别1中,5到8在类别2中 bids表包含与Items.id类似的Items_id,范围从1到8。 现在,我的查询是,如果我从bids.item\u id中选择一个项目,我想查看同一类别中的id 例如:如果我在查询中说 如果bids中的item_id为“2”,我希望看到相同类别的其他id,这意味着它应该返回“1”“3”“4”,因为1到4个items.id位于cat

我有两张桌子。项目和投标

项目:-id整数,类别整数。 id的范围从1到8,并且它们是唯一的。在类别中,它是1和2,例如id:1到4在类别1中,5到8在类别2中

bids表包含与Items.id类似的Items_id,范围从1到8。 现在,我的查询是,如果我从bids.item\u id中选择一个项目,我想查看同一类别中的id

例如:如果我在查询中说 如果bids中的item_id为“2”,我希望看到相同类别的其他id,这意味着它应该返回“1”“3”“4”,因为1到4个items.id位于category=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)

这将查找与您选择的投标中的项目共享一个类别的所有项目。它通过一个子选择来实现这一点。因此,它在paranthesis中进行选择,找到正确的类别,并在外部查询的where子句中使用该类别

我不明白为什么您需要引用bids表,因为bids.item_id与items.id相同。您只需要与其他项目属于同一类别的所有项目。您可以通过简单的自联接来实现这一点

SELECT i1.id
FROM items AS i1
JOIN items AS i2 ON i1.category = i2.category
WHERE i2.id = 2
如果您实际有一个bid.id,并且希望查找与该bid中的项目属于同一类别的所有项目,则只需添加另一个联接:

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

我认为有两种可能的解决办法:

一,。你的分类永远不会改变

在您的问题中,您提到只有两种可能的类别: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}

这有帮助吗?

您能先格式化您的问题吗?实际上,bids表还有其他信息,如bids.user\U id、bids.max\U bid、bids.date等。因此,当我从bids.item\U id中选择一个项目时,我想检查其他id在同一类别中是什么!由于人们正在选择出价,所以他有机会获得出价的几率也相当高。在这种情况下,您需要第二次连接到bids表,这当然是一个可行的解决方案,这会使问题变得复杂一些。我已经添加了queryPerfect的那个版本!它起作用了!我有188227项投标。我随机选择了一个id:bidID进行检查,它成功了!再次感谢汉克斯!我会查一查,然后告诉你-
SELECT id FROM items WHERE items.category = (SELECT items.category FROM items, bids WHERE items.id = bids.item_id)