Php 将数据库值与另一个表中的行数进行比较

Php 将数据库值与另一个表中的行数进行比较,php,mysql,Php,Mysql,对于第一个表中的每个项目,都有一个“numberOf”字段。此字段的值在相关表中的行数必须相同。这些行类似于预订行,因此多个用户可以同时预订项目。这种同步有时会停止,并且行数多于“numberoff”字段变量,反之亦然 所以我想显示一个表,它从第一个表中输出'numberOf',并从另一个表中输出与之对应的行数。它们由项目ID链接。希望这不会太混乱。查询是通过do while循环输出的。以下是我到目前为止提出的问题: $querySync = sprintf("SELECT

对于第一个表中的每个项目,都有一个“numberOf”字段。此字段的值在相关表中的行数必须相同。这些行类似于预订行,因此多个用户可以同时预订项目。这种同步有时会停止,并且行数多于“numberoff”字段变量,反之亦然

所以我想显示一个表,它从第一个表中输出'numberOf',并从另一个表中输出与之对应的行数。它们由项目ID链接。希望这不会太混乱。查询是通过do while循环输出的。以下是我到目前为止提出的问题:

$querySync = sprintf("SELECT 
                          COUNT(reserve_id), item_id, details, numberOf
                      FROM 
                          reservations     
                      JOIN 
                          items ON item_id = itemID_reserved                    
                      WHERE 
                          itemID_reserved = 1 ");
因此,目前它统计保留表中的行数。然后它加入items表,这样我就可以显示description和numberOf等。当然,此时它只输出ID为1的项。但我似乎无法让它遍历每一项,检查它的numberoff,并将其与预订表中的行数进行比较

其想法是将所有内容放在一列上,如果不同步,则在行尾打印。然后,我需要重新生成reservations表中的行,以匹配numberOf


对不起,这是一个很长的问题

直接计算哪些项目“不同步”可能更容易:

SELECT  COUNT(reserve_id), item_id, details, numberOf,
        COUNT(reserve_id) > numberOf AS overbook
FROM    items
LEFT JOIN
        reservations
ON      itemID_reserved = item_id
GROUP BY
        item_id

关于哪些表有哪些字段,我做了一些假设,但这应该足够说明。

直接计算哪些项“不同步”可能更容易:


关于哪些表有哪些字段,我做了一些假设,但这应该足够说明问题。

为什么要存储计算值?由于计算值所需的数据已经存储在数据库中,因此可以有效地反规范化。对于汇总表来说,这可能是可以接受的,但通常不被认为是良好的做法。dnagirl提出了一个很好的观点-这是您试图存储聚合值造成的问题。我认为
numberoff
是可能的最大预订数量,而不是实际数量,这就是
@op
想要比较的内容。在这种情况下,向表
保留
表添加一个检查约束以防止计数超过numberOf可能是一个好主意。Quassnoi是正确的,它是最大保留,不是一个计算值。将项目添加到数据库时输入该值。为什么要存储计算值?由于计算值所需的数据已经存储在数据库中,因此可以有效地反规范化。对于汇总表来说,这可能是可以接受的,但通常不被认为是良好的做法。dnagirl提出了一个很好的观点-这是您试图存储聚合值造成的问题。我认为
numberoff
是可能的最大预订数量,而不是实际数量,这就是
@op
想要比较的内容。在这种情况下,向表
保留
表添加一个检查约束以防止计数超过numberOf可能是一个好主意。Quassnoi是正确的,它是最大保留,不是一个计算值。将项目添加到数据库时输入
select i.item_id
from reservations r JOIN items i on (i.item_id = r.itemID_reserved)
group by i.item_id
having count(r.itemID_reserved) > i.numberOf