Mysql 多行返回相同ID,只需要一行
我试图在一页上列出几种产品。我的查询返回同一产品的多个,我正试图找出如何将查询限制为一个 我们称之为table_one的第一个表上的主键是ID。 第二个表有一列ProductID,它引用表1上的主键 我的查询返回了ProductID的倍数,该倍数等于下面的6。我只希望返回一个结果,但我仍然希望查询表2上保留日期中的所有数据。我很确定我还需要在我的查询中添加一个东西,但我运气不太好 我想要的结果如下Mysql 多行返回相同ID,只需要一行,mysql,sql,Mysql,Sql,我试图在一页上列出几种产品。我的查询返回同一产品的多个,我正试图找出如何将查询限制为一个 我们称之为table_one的第一个表上的主键是ID。 第二个表有一列ProductID,它引用表1上的主键 我的查询返回了ProductID的倍数,该倍数等于下面的6。我只希望返回一个结果,但我仍然希望查询表2上保留日期中的所有数据。我很确定我还需要在我的查询中添加一个东西,但我运气不太好 我想要的结果如下 ID Productname Quantity Image
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
这是我的第一张桌子。表1
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
选择*
从“表1”开始
左连接'table_two'
在'table\u one`.'ID`='table\u two`.'ProductID`
其中“表1”。“数量”>0
或者'table_two`.'DateReserved`+间隔5天因为您使用的是MySQL
LIMIT <NUMBER>
限制
如果您想做什么就做什么,只需在ORDERBY子句之后插入它,但可能还应该再添加一个排序,这样您就可以确保始终得到您想要的一个实体,而不仅仅是一些“随机”实体;)
因此,如果不进一步排序,您的查询将如下所示:
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
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
选择
*
从“表1”开始
在“table\u one”上左键联接“table\u two”。`ID`=`table\u two`.`ProductID`
哪里
`表1`.`数量`>0
或者“table_two”。“DateReserved”+间隔5天很抱歉发布了另一个答案,但我第一次尝试的结果似乎不太好;)
为了每个预订只得到一个结果行,您需要以某种方式对它们进行汇总。
首先,我建议您显式地选择要返回结果的列,不要使用“*”
我建议你试试这样:
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
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
选择
`表1`.`ID`、`table`U one`.`Productname`、`table`U one`.`Image`、`table`U one`.`数量`、,
`表2`.`ProductID`,SUM(`表2`.`QuantityReserved`)
从…起
`表1
左连接
`表1上的表2'.'ID`='表2'.'ProductID`
哪里
`表1`.`数量`>0
或者“table_two”。“DateReserved”+间隔5天我想只显示一次所有的产品名称,但是我所有的DateReserved数据仍然来自table_two中的每个记录。啊,对不起,我误解了你的问题,那么你可能想对结果进行聚合?对不起,我是mysql新手。我只是想学习一下诀窍。据我所知,您希望将产品6的预订汇总为一个结果,因此您从数据库中得到两行数据,一行包含产品7的预订数据,一行包含产品6的预订数据,对吗?而不是从预订日期算起增加5天,你应该从你的“结束”日期减去5天(这可能是有原因的)。此外,您通常应该使用“独占上限”(我希望我的结果从用户指定的日期(例如2013年3月31日)起有5天以上的时间)。我不希望返回多个相同记录,因为这是一个列表。我希望每个结果都显示名称和图像。我的意思是,考虑到您提供的示例数据,我们是否可以获得查询的示例“目标”输出(即,您想要返回的内容,而不是您当前获得的内容)。用户提供的内容并不重要-您仍然可以从他们在查询中提供的日期中减去时间间隔。我在编辑中提供了时间间隔。这几乎是正确的!但我不会从表1中获取数量大于0的其他产品。我得到了它!我只需将productID上的组更改为第一个表中的ID,而不是t第二个表。非常感谢您的帮助。我真的非常感谢。请注意,虽然这在mySQL中可能有效,但在非聚合、非分组列中遇到的确切值在语句编写时无法定义;它们本质上是“随机”的。(只有在结果中添加了DateReserved
时,这才是真正的问题,如果有多行符合要求,查询可能很难判断“哪个日期”,因为其他所有内容都是唯一地键入了table_one.id
)对不起,我昨天没有回来,是afk;)但我很高兴这有帮助。有问题的是表1
和表2
,而不是tbl\u成员
&tbl\u行程