gpt4 book ai didi

php - MYSQL 从 3 个表中选择

转载 作者:行者123 更新时间:2023-11-29 02:57:39 25 4
gpt4 key购买 nike

我正在尝试从 3 个表中进行选择:产品、出价、订单。

在出价中,它只是一个出价ID,用户名,金额,时间戳,日期,项目

在产品中,它有多个,价格,描述,图片,位置,运费等

在订单中是地址、用户名、姓名、产品、发货

我正在尝试从用户名=?所以我可以检查商品是否已通过 $query->shipped(ordertable) 发货或支付 $query->status(ordertable) 而不是执行 foreach 和另一个查询

现在,我有一个针对其中 2 个表的查询,但是当我添加订单时,没有显示任何产品:

工作

SELECT * FROM bids,products WHERE bids.username=? AND NOW() > products.enddate GROUP BY item ORDER BY amount DESC 

不工作,但需要这种类型的查询

SELECT * FROM bids,products,orders WHERE bids.username=? AND NOW() > products.enddate GROUP BY item ORDER BY amount DESC 

我将如何选择订单。我已附上表格的结构以供引用。:

产品——需要全部

products

订单 -- 全部需要

orders

出价 -- 需要全部

bids

最佳答案

为了从多个表中准确选择,必须要有外键。请注意,您的第一个查询在没有通过外键列连接的情况下被破坏。

我看到您的 Bids 表有一列 item。如果这个列是我想的那样,列名应该是product_id之类的,并且应该指定为对id列的外键引用您的 Products 表。这就是我们确保每次出价都针对有效产品的方式。

鉴于 Bids 中的 item 列是 Products 的外键,您的第一个查询将被正确说明(在引用方面完整性和基数)作为:

SELECT * FROM bids INNER JOIN products ON bids.item = products.id
WHERE bids.username=? AND NOW() > products.enddate
ORDER BY amount DESC

如果您想确保检索所有产品记录,无论它们是否有出价,请使用上面的 RIGHT JOIN 而不是 INNER JOIN,并更改您的用户名过滤到 (bids.username = ? OR bids.username IS NULL)

现在开始您的第二个查询,即您寻求帮助的查询。鉴于您提供的模式,没有好的方法来表示这样的查询。由于 BidsOrders 的基数不断扩大,恐怕查询永远无法正常运行。

如果您还想尝试,这里是三表连接的起点:

SELECT * FROM products
LEFT JOIN bids ON products.id = bids.item
LEFT JOIN orders ON products.id = orders.product

左连接将确保您检索所有产品记录。就基数而言,这样做的问题是每个产品的行数太多(每个产品的出价数乘以该产品的订单数)。

关于php - MYSQL 从 3 个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com