在使用MySQL的PHP中,我试图编写查询以使用Joined Tables拉取某些必需的报告。我已经阅读了许多SQL脚本手册,并且通常会通过将过滤后的记录从db表中拉入PHP并执行以下操作来完成此类操作那里的数学体操。不幸的是,这效率低下,因此我正在寻找正确的SQL查询以指示正确的方向。这是我的情况。
我有mysql表:事件和付款,它们由一个ID列链接(events.event_id = payments.payment_event_id)
我需要获取一个仅包含与付款相关程度最高的5个事件的记录集。然后,我想要一个包含此原始事件详细信息数组以及一个整数的数组,该整数是其票务支付计数。
理想情况下,结果数组结构应如下所示:
$result_events--
|0||0|payment count(53)
|0||1|$full event array
|1||0|Payment Count (34)
|1||1|$full event array
编辑:
与人交谈后,我想我会说出我要追求的目标。我需要一个2列的结果集,左列是event_id(来自事件表),右列是该事件的付款总额(即与该事件ID匹配的“付款”行数。因此,从事件和付款,我想留下一个这样的东西:
| Event_id | total Payments |
但按付款列排序。我知道我在问地球:)
如果您想获得某事件的5种最常见付款并仅获得这5条详细信息,则可以执行子查询以获取event_id,然后在其中对payment_event_ids进行分组,然后按从上到下的顺序对计数进行排序,并获得前5个结果。
然后,您获取这些ID,并获取与这些ID相匹配的事件详细信息
SELECT
*
FROM
events
WHERE
event_id IN (
SELECT
payment_event_id
FROM
payments
GROUP BY payment_event_id
ORDER BY count(*) DESC
LIMIT 5
);
(可选)您还可以通过联接获得所有付款详细信息,但是您将获得多于5行的返回方式
SELECT
*
FROM
events
JOIN
payments
ON
events.event_id = payments.payment_event_id
WHERE
events.event_id IN (
SELECT
payment_event_id
FROM
payments
GROUP BY payment_event_id
ORDER BY count(*) DESC
LIMIT 5
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句