我想在页面上列出几个产品。我的查询返回相同产品的倍数,我试图找出如何仅使用我的查询将其限制为一个。
我们称之为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'
这是我的第二张桌子。 table_two
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
答案 0 :(得分: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的多次出现。
您现在遇到的一个问题是,您必须从单独的查询中获取预订日期(至少我现在不确定如何将其置于相同的查询中)
答案 1 :(得分: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
答案 2 :(得分: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