Пейджер исчезает при добавлении "ГРУППИРОВАТЬ ПО" в SQL-запрос


Пейджер Drupal исчезает, когда я добавляю GROUP BY в запрос.

Этот код работает.

$countSql = "SELECT  COUNT(*) FROM journal ";
$sql = "SELECT  * FROM journal";    

$result = pager_query($sql, 1, 0, null, $countSql);
theme_pager(NULL, 10)

Этот код не отображает пейджер.

$countSql = "SELECT  COUNT(*) FROM journal ";
$sql = "SELECT  * FROM journal GROUP BY id";

$result = pager_query($sql, 1, 0, null, $countSql);  
theme_pager(NULL, 10)

Что не так с последним кодом?

Author: espero, 2011-12-26

2 answers

Ваш запрос с GROUP BY неверен, MySQL достаточно слаб, чтобы позволить вам писать запросы такого рода, но это никоим образом не рекомендуется. Когда вы используете предложение GROUP BY, вы должны сгруппировать все столбцы без агрегатной функции .

Также, если вы добавляете GROUP BY в свой запрос, вы также должны включить его в свой запрос count. Как правило, грубый способ сделать запрос count заключается в следующем:

$sql = "SELECT  * FROM journal";
$countSql = "SELECT  COUNT(*) FROM ($sql) ";

Попробуйте изменить свои запросы и изменить свой вопрос с помощью дальнейшие уточнения.

 4
Author: tostinni, 2011-12-26 15:26:04

Мне нужны разные журналы, и их идентификаторы должны быть в таблице статей; в таблице статей может быть несколько идентификаторов журналов, и мне нужны два столбца статей.

SELECT  j.nid AS journal_nid, j.title AS journal_title, j.id AS journal_id, a.is_epub, a.nid AS article_nid, j.image_file_name
FROM journal j
INNER JOIN article a ON j.id = a.journal_id ". $condition." GROUP BY j.id ORDER BY j.title ASC

Я изменил свой запрос, и появился пейджер.

SELECT  j.id AS journal_id, j.nid AS journal_nid, j.title AS journal_title, j.image_file_name,
(select max(nid) from article where journal_id = j.id) AS article_nid,
(select max(is_epub) from article where journal_id = j.id) is_epub
FROM journal j
WHERE j.id IN (SELECT journal_id FROM article)
 1
Author: Kamran Akhter, 2012-05-12 14:02:37