0

我试图在一个页面上列出几个产品。我的查询返回多个相同的产品,我试图弄清楚如何通过我的查询将其限制为一个。

我们将调用 table_one 的第一个表的主键是 ID。第二个表有一个 ProductID 列,它引用 table_one 上的主键。

我的查询带回了我的 ProductID 的倍数,等于下面的 6。我只想带回一个结果,但我仍然希望查询我在 table_two 上的 DateReserved 中的所有数据。很确定我需要在查询中再添加一件事,但我运气不佳。

我想要回来的结果如下。

ID   Productname  Quantity              Image       Date Reserved         SumQuantity

6    productOne          6        'image.jpg'          03-31-2013                   3           
7    productTwo          1      'product.jpg'          04-04-2013                   1  

这是我的第一张桌子。table_one

ID   Productname  Quantity              Image

6    productOne          6        'image.jpg'                 
7    productTwo          1      'product.jpg'

这是我的第二张桌子。表二

ID     ProductID       DateReserved  QuantityReserved

1             6          03-31-2013                 3                 
2             6          04-07-2013                 2
3             7          04-04-2013                 1

这是我正在尝试使用的查询。

SELECT * 
FROM `table_one` 
LEFT JOIN `table_two` 
       ON `table_one`.`ID` = `table_two`.`ProductID` 
WHERE `table_one`.`Quantity` > 0  
      OR `table_two`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-27' 
ORDER BY ProductName
4

3 回答 3

1

很抱歉发布另一个答案,但似乎我的第一次尝试不太好;)

要每次预订只获得一个结果行,您需要以某种方式总结它们。首先,我建议您在结果中明确选择要返回的列,不要使用“*”。

我建议你尝试这样的事情:

SELECT
        `table_one`.`ID`, `table_one`.`Productname`, `table_one`.`Image`, `table_one`.`Quantity`,
        `table_two`.`ProductID`, SUM(`table_two`.`QuantityReserved`)
    FROM
        `table_one` 
    LEFT JOIN
        `table_two` ON `table_one`.`ID` = `table_two`.`ProductID` 
    WHERE
        `table_one`.`Quantity` > 0  
        OR `table_two`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-27'
    GROUP BY `table_two`.`ProductID`
    ORDER BY ProductName

如您所见,我使用“SUM”来获得组合数量,这称为聚合,“GROUP BY”可以帮助您摆脱同一个 ProductID 的多次出现。

您现在遇到的一个问题是您必须从单独的查询中获取预订日期(至少我现在不确定如何将其放入同一个查询中)

于 2013-03-20T16:18:49.953 回答
0

由于您使用的是 MySQL

LIMIT <NUMBER>

应该完全按照您的意愿行事,您只需在 ORDER BY 子句之后插入它,但可能您还应该再添加一个排序,这样您就可以确定您将始终获得您想要的一个实体,而不仅仅是一些“随机”实体;)

因此,无需进一步订购,您的查询将如下所示:

SELECT
    *
FROM `table_one` 
LEFT JOIN `table_two` ON `table_one`.`ID` = `table_two`.`ProductID` 
WHERE
    `table_one`.`Quantity` > 0
    OR `table_two`.`DateReserved` +  INTERVAL 5 DAY <= '2013-03-27'
ORDER BY ProductName
LIMIT 1

这里有更多关于那个的描述

于 2013-03-20T15:36:18.367 回答
0
SELECT a.member_id,a.member_name,a.gender,a.amount,b.trip_id,b.location 
FROM tbl_member a
LEFT JOIN (SELECT trip_id, MAX(amount) as amount FROM tbl_member GROUP BY trip_id ) b ON a.trip_id= b.trip_id 
  LEFT JOIN tbl_trip b ON a.trip_id=c.trip_id  
ORDER BY member_name
于 2018-10-09T11:22:02.460 回答