我的查询显示具有相应票证号的买家的DISTINCT计数。我需要自动计算SOLD和BALANCE列并将其保存到数据库中,或者将其保存到现有表(table1)中,并具有与票务相对应的行。我已经筋疲力尽,去过谷歌很多次,但我只是想不通。因此,我尝试通过尝试在数据库中创建一个新表来显示DISTINCT COUNT的输出来尝试另一种选择,但是我没有找到要遵循的示例查询,因此我可以将INNER JOIN用于带有table1的新表, PRINTED,SOLD在同一张表中,因此我可以减去这些列以获得BALANCE列的值。现有的table1和table2是通过html形式在数据库中的记录:
Table1
Ticket Serial Printed Copies SOLD(sold) Balance
TS#1234 50 ?(should be auto ?
TS#5678 80 ?(should be auto ?
(so on and so forth...)
Table2
Buyer Ticket Serial
Adam TS#1234
Kathy TS#1234
Sam TS#5678
(so on and so forth...)
COUNT DISTINCT输出数量。售票数:
<td> <?php print '<div align="center">'.$row['COUNT(ticketserial)'];?></td>
...
$query = "SELECT *, COUNT(ticketserial) FROM buyers WHERE ticketsold != 'blank' GROUP BY
ticketserial ";
这是COUNT个输出,看起来像这样:
Ticket Serial------Distinct Count
TS#1234 7
TS#5678 25
(so on and so forth...)
我尝试通过UPDATE或INSERT和foreach循环更新SOLD列和BALANCE列但是仅更新了表中的第一行。
Table1
Ticket Serial Printed Copies Sold Balance
TS#1234 50 **7** 0
TS#5678 80 **0** 0
TS#8911 40 **0** 0
(so on and so forth...)
注:表1中的字段名称“已售”与表2中的字段名称“售票”不同,因为前者是数量,后者是票务。
您的问题有点难以理解。但是,这看起来像是汇总查询上的left join
:
select
t1.ticket_serial,
t1.printed_copies,
coalesce(t2.sold, 0) sold,
t1.printed_copies - coalesce(t2.sold, 0) balance
from table1 t1
left join (
select ticket_serial, count(*) sold
from table2
group by ticket_serial
) t2 on t2.ticket_serial = t1.ticket_serial
如果要查看update
主表:
update table1 t1
left join (
select ticket_serial, count(*) sold
from table2
group by ticket_serial
) t2 on t2.ticket_serial = t1.ticket_serial
set
t1.sold = coalesce(t2.sold, 0),
t1.balance = t1.printed_copies - coalesce(t2.sold, 0)
我实际上不建议在主表中存储sold
和balance
-这是派生的信息,可以在需要时轻松计算,并且维护起来很繁琐。如果需要,您可以使用上面的第一个SQL语句创建一个视图,这将为您提供有关数据的始终最新的视图。