0

我有这个基本查询,它返回程序标题(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());

我一直在试图弄清楚如何按程序对其进行分页,无论有多少子行。我在另一个页面上有一个分页类,但这只能从一个表中提取。

我一直在尝试实现相同的分页,但我只能让它拉第一个程序,然后它根据子行而不是主程序行来限制页面。在我在这里发布的状态下,接下来的每个页面都只显示第一个程序。出现的子行在每一页上都不同,但我不知道它们是否都在第一个程序中。

该查询可以正常提取所有结果,但如果它是一个巨大的列表,则效率极低,甚至可能使浏览器超时。

任何帮助将不胜感激,如果我可以包括其他任何内容,请告诉我。

我不太关心使用相同的分页类,所以我对不同的方法完全开放。

提前致谢

4

1 回答 1

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());

当然也可以有页面少于分页的项目,因为没有注册的事件将不会显示。

于 2013-05-08T14:56:36.767 回答