2015-05-23 4 views
0

здесь есть запрос с пагинациейMYSQL: GROUP BY проблем с ORDER BY

$page = (int)(!isset($_GET["page"]) ? 1 : $_GET["page"]); 

    if ($page <= 0) $page = 1; 

    $per_page = 2; // Set how many records do you want to display per page. 

    $startpoint = ($page * $per_page) - $per_page; 

    $statement = "`message_box` WHERE reciver = '".dec($_SESSION['user_reporter'])."' AND status='0' GROUP BY `sender` ORDER BY `date_added` DESC"; 

    $result = mysql_query("SELECT count(*),id,sender,message,status,date_added FROM {$statement} LIMIT {$startpoint} , {$per_page}"); 

и в конце таблицы, где отображаются мои данные, я называю свою функцию разбиения на страницах (определить в моем пользовательском-function.php).

Итак, с вышеуказанным запросом мой блок разбиения на страницы не отображается. Но когда я удалить

GROUP BY `sender` 

ОТ $ заявление как это,

$statement = "`message_box` WHERE reciver = '".dec($_SESSION['user_reporter'])."' AND status='0' GROUP BY `sender` ORDER BY `date_added` DESC"; 

постраничной дисплеев и работает нормально, но я хочу, что GROUP BY sender пункта.

извините за плохой английский .... пожалуйста ... помогите!

+0

Я не уверен, что понял ваш вопрос. Когда вы говорите, что ваша разбивка на страницы не отображается, у вас есть ошибка (например, ошибка SQL?) Где-то? – Truche

ответ

0

Этот запрос:

SELECT count(*), id, sender, message, status, date_added 
FROM {$statement} 
LIMIT {$startpoint}, {$per_page} 

собирается возвращать одну строку, независимо от пункта LIMIT. Это запрос агрегации без предложения GROUP BY. Такой запрос представляет собой агрегацию по всей таблице и по определению возвращает одну строку.

Удалите count(*), если хотите все строки. Добавьте GROUP BY id, sender, message, status, date_added, если вы хотите подсчитать количество дубликатов для этих столбцов.

+0

yippi !!! он работает ... спасибо – vitally