Пейджер исчезает при добавлении "ГРУППИРОВАТЬ ПО" в 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)
Что не так с последним кодом?
2 answers
Ваш запрос с GROUP BY
неверен, MySQL достаточно слаб, чтобы позволить вам писать запросы такого рода, но это никоим образом не рекомендуется. Когда вы используете предложение GROUP BY
, вы должны сгруппировать все столбцы без агрегатной функции .
Также, если вы добавляете GROUP BY
в свой запрос, вы также должны включить его в свой запрос count. Как правило, грубый способ сделать запрос count заключается в следующем:
$sql = "SELECT * FROM journal";
$countSql = "SELECT COUNT(*) FROM ($sql) ";
Попробуйте изменить свои запросы и изменить свой вопрос с помощью дальнейшие уточнения.
Мне нужны разные журналы, и их идентификаторы должны быть в таблице статей; в таблице статей может быть несколько идентификаторов журналов, и мне нужны два столбца статей.
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)