2013-05-08 133 views
0

我有這個基本的查詢,返回一個節目標題(eventdesc)的主要行,然後列出程序參與者和信息作爲多個子行。分頁時,忽略子行,與一個正確的加入

PROGRAM 1
電子郵件1,電子郵件2,名稱,狀態(第一參與者)
電子郵件1,電子郵件2,名稱,狀態(第二參與者)
PROGRAM 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

嘗試使用子查詢:

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

可以有小於分頁項目當然頁面的,因爲沒有註冊的事件將不會顯示

+0

謝謝你,不幸的是我得到了。此錯誤:此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查詢' – 2013-05-08 15:20:23

+0

謝謝你的時間。我一直試圖讓它工作,但我得到一個解析錯誤當我開始我的while()時,我通過$ query循環,原諒潛在的愚蠢問題,但是我應該如何命名Drop Table和Create Temp Table查詢?其他所有內容似乎都應該是這樣的工作。再次感謝。 – 2013-05-09 21:50:20

+0

知道解析。頁正在渲染,分頁似乎正在工作,但沒有行正在顯示。 – 2013-05-09 22:18:20