Mysql 多行返回相同ID,只需要一行

Mysql 多行返回相同ID,只需要一行,mysql,sql,Mysql,Sql,我试图在一页上列出几种产品。我的查询返回同一产品的多个,我正试图找出如何将查询限制为一个 我们称之为table_one的第一个表上的主键是ID。 第二个表有一列ProductID,它引用表1上的主键 我的查询返回了ProductID的倍数,该倍数等于下面的6。我只希望返回一个结果,但我仍然希望查询表2上保留日期中的所有数据。我很确定我还需要在我的查询中添加一个东西,但我运气不太好 我想要的结果如下 ID Productname Quantity Image

我试图在一页上列出几种产品。我的查询返回同一产品的多个,我正试图找出如何将查询限制为一个

我们称之为table_one的第一个表上的主键是ID。 第二个表有一列ProductID,它引用表1上的主键

我的查询返回了ProductID的倍数,该倍数等于下面的6。我只希望返回一个结果,但我仍然希望查询表2上保留日期中的所有数据。我很确定我还需要在我的查询中添加一个东西,但我运气不太好

我想要的结果如下

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行程