Blogのページのトピックのフィルタを行うとエラーになってしまう

2018年6月28日 at 12:45

お世話になります。

現在、さくらの環境でサイトを構築しています。

concrete5 ver8.3.2
Stucco ver 2.1.4
easy_image_gallery ver 1.4.2
Simple Gallery ver 1.0.7


Blogのページのトピックのフィルタを行うとエラーになってしまいます。

An exception occurred while executing 'SELECT distinct p.cID, p.cDisplayOrder FROM Pages p LEFT JOIN PagePaths pp ON (p.cID = pp.cID and pp.ppIsCanonical = true) LEFT JOIN PageSearchIndex psi ON p.cID = psi.cID LEFT JOIN PageTypes pt ON p.ptID = pt.ptID INNER JOIN Collections c ON p.cID = c.cID INNER JOIN CollectionVersions cv ON p.cID = cv.cID LEFT JOIN CollectionSearchIndexAttributes csi ON c.cID = csi.cID INNER JOIN CollectionAttributeValues cavTopics ON cv.cID = cavTopics.cID and cv.cvID = cavTopics.cvID INNER JOIN AttributeValues av ON cavTopics.avID = av.avID INNER JOIN atSelectedTopics atst ON av.avID = atst.avID WHERE (cvName != ?) AND (pt.ptID = ?) AND (ak_exclude_page_list <> 1 or ak_exclude_page_list is null) AND (atst.treeNodeID = ?) AND (p.cPointerID < 1) AND (p.cIsTemplate = 0) AND (cvIsApproved = 1) AND ((cvPublishDate <= ? or cvPublishDate is null)) AND (p.cIsActive = ?) AND (p.siteTreeID = ?) AND (p.cIsSystemPage = ?) ORDER BY cv.cvDatePublic desc LIMIT 1000' with params ["", "17", 144, "2018-06-28 12:10:18", true, 1, false]: SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'studiomon_mondata8.cv.cvDatePublic' which is not in SELECT list; this is incompatible with DISTINCT

他の方の記事をみると、MySQL5.7から「ONLY_FULL_GROUP_BY」がデフォルト値として追加になったのが原因のようですが、
対処としてなにかありますでしょうか?



# concrete5 Version
Core Version - 8.3.2
Version Installed - 8.3.2
Database Version - 20180122213656

# concrete5 Packages
Easy Image Gallery (1.4.2), Simple Gallery (1.0.7), Stucco (2.1.4)

# concrete5 Overrides
None

# concrete5 Cache Settings
Block Cache - On
Overrides Cache - On
Full Page Caching - On - If blocks on the particular page allow it.
Full Page Cache Lifetime - Every 6 hours (default setting).

# Server Software
Apache

# Server API
cgi-fcgi

# PHP Version
7.1.17

# PHP Extensions
apcu, cgi-fcgi, Core, ctype, curl, date, dom, exif, fileinfo, filter, gd, gettext, gmp, hash, iconv, intl, json, libxml, mbstring, mcrypt, mysqli, mysqlnd, openssl, pcre, PDO, pdo_mysql, pdo_sqlite, Phar, posix, Reflection, session, SimpleXML, snmp, soap, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, xsl, Zend OPcache, zip, zlib

# PHP Settings
max_execution_time - 180 
log_errors_max_len - 1024
max_file_uploads - 20
max_input_nesting_level - 64
max_input_time - -1
max_input_vars - 1000
memory_limit - 192M
post_max_size - 8M
sql.safe_mode - Off
upload_max_filesize - 2M
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
session.cache_limiter - <i>no value</i>
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 10000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

タグ:

Re: Blogのページのトピックのフィルタを行うとエラーになってしまう

2018年6月28日 at 14:27
SQL文を頼りにソースを探したところ、
\concrete\src\Page\PageList.php
とわかったので、エラー原因と言われている並べ替えのカラムをselectに追加してみたところエラーはなくなった。

PageList.phpの598行目に
$this->query->addSelect('cv.cvDatePublic');
selectの項目を追加するステートメントを書き足した。

書き足したあとは以下の通り
$this->query->select('distinct p.cID');
$this->query->addSelect('p.cDisplayOrder');
$this->query->addSelect('cv.cvDatePublic');
}

エラーはでなくなったが、これでいいでしょうか?