我有这个基本查询返回程序标题的主要行(eventdesc),然后将程序参与者和信息列为多个子行。
计划1
电子邮件1,电子邮件2,姓名,状态(第一位参与者)
电子邮件1,电子邮件2,姓名,状态(第二参与者)
计划2
电子邮件1,电子邮件2,姓名,状态(第一位参与者)
... ETC
基本查询:
$query_perpage = "SELECT COUNT(*) FROM camps_events";
$result = mysql_query($query_perpage, $db) or die(mysql_error());
$r = mysql_fetch_row($result);
$numrows = $r[0];
$pages = new Paginator($query);
$pages->items_total = $numrows;
$pages->paginate();
$pages->mid_range = 7;
$query = mysql_query("SELECT ce.eventcode, ce.eventdesc, ce.date, r.participant_fname, r.participant_lname,
r.position, r.dob, r.status, r.email_primary, r.order_number
FROM camps_events ce
RIGHT JOIN registrations r on r.eventcode = ce.eventcode
WHERE ce.reg_status = 'Active'
AND r.status NOT IN ('Incomplete','Canceled')".getAllowedPrograms()."
ORDER BY ce.eventdesc, ce.eventcode, r.participant_lname ASC $pages->limit ") or die(mysql_error());
我一直试图弄清楚如何通过程序对它进行分页,无论有多少个子行。 我在另一个页面上有一个分页类,但只从一个表中提取。
我一直在尝试实现相同的分页,但我只能将它拉到第一个程序,然后它根据子行限制页面,而不是主程序行。在我在这里发布的状态中,每个后续页面仅显示第一个程序。每个页面上出现的子行不同,但我不知道它们是否都在第一个程序中。
该查询可以正常地提取所有结果,但如果它是一个巨大的列表,它的效率非常低,甚至可以超时浏览器。
如果我能包含任何其他内容,请与我们联系。
我并不太关心使用相同的分页类,所以我完全接受不同的方法。
提前致谢
答案 0 :(得分:0)
尝试使用子选择:
SELECT ce.eventcode, ce.eventdesc, ce.date, r.participant_fname, r.participant_lname,
r.position, r.dob, r.status, r.email_primary, r.order_number
FROM camps_events ce
RIGHT JOIN registrations r on r.eventcode = ce.eventcode
WHERE ce.reg_status = 'Active'
AND r.status NOT IN ('Incomplete','Canceled')".getAllowedPrograms()."
AND ce.id in (select id from camps_events pgce order by ce.eventdesc, ce.eventcode $pages->limit)
ORDER BY ce.eventdesc, ce.eventcode, r.participant_lname ASC ")
or die(mysql_error());
编辑:遗憾的是MySQL还不能限制子查询。 :-( 所以它必须是一个临时表:
mysql_query("drop temporary table if exists tmp_events", $db);
mysql_query("create temporary table tmp_events select id from camps_events order by eventdesc, eventcode " . $pages->limit, $db);
mysql_query("SELECT ce.eventcode, ce.eventdesc, ce.date, r.participant_fname, r.participant_lname,
r.position, r.dob, r.status, r.email_primary, r.order_number
FROM camps_events ce
inner join tmp_events pgce on pgce.id = ce.id
RIGHT JOIN registrations r on r.eventcode = ce.eventcode
WHERE ce.reg_status = 'Active'
AND r.status NOT IN ('Incomplete','Canceled')".getAllowedPrograms()."
ORDER BY ce.eventdesc, ce.eventcode, r.participant_lname ASC ")
or die(mysql_error());
当然可以有页面少于分页项目的页面,因为没有注册的事件将不会显示。