質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

1回答

1469閲覧

クエリビルダで表示エラー

YUOKAWARA

総合スコア1

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

0グッド

0クリップ

投稿2021/09/13 11:15

前提・実現したいこと

環境
MAC OS BigSur
MAMP
ECcube 4.0.5

クエリビルダの実装にて悩んでおります。
以下のカラムを所持しております。
|id|discriminator|order_id| square_quantity| update_date|square_product_id
|:--|:--:|--:|
||||

クエリビルダは正直使い慣れておらず、少しづつ進めております。
やりたきことは、
こちらのsquare_product_idの重複を解消し、square_quantityの数が多い順に並べようと思っております。
現在、重複の解消は以下のコードにて解消しているのですが、square_quantityの処理をつけようとしているのですが期待通りの結果を得られず
エラーが出てしまいます。
エラーコードをもとに検索もしておりますが、なかなか解決策の様なものを見つけられません。(見落としてるのかもしれません)
この場合、どの様にクエリビルダを指定すれば、数の多い順に表示できるでしょうか?
アドバイスいただければ幸いです。

発生している問題・エラーメッセージ

An exception occurred while executing 'SELECT d0_.square_product_id AS square_product_id_0, d0_.square_quantity AS square_quantity_1 FROM dtb_square_order_detail d0_ WHERE d0_.discriminator_type IN ('squareorderdetail') GROUP BY d0_.square_product_id ORDER BY d0_.square_product_id ASC, d0_.square_quantity DESC LIMIT 5': SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'local20210526.d0_.square_quantity' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

該当のソースコード

PHP

1<?php 2 3namespace Customize\Repository; 4 5// use Customize\Entity\SquareOrder; 6use Customize\Entity\SquareOrderDetail; 7use Doctrine\Common\Collections\ArrayCollection; 8// use Eccube\Repository\AbstractRepository; 9use Symfony\Bridge\Doctrine\RegistryInterface; 10 11class SquareOrderDetailRepository extends \Eccube\Repository\AbstractRepository 12{ 13 /** 14 * SquareOrderRepository constructor. 15 * 16 * @param RegistryInterface $registry 17 */ 18 public function __construct(RegistryInterface $registry) { 19 parent::__construct($registry, SquareOrderDetail::class); 20 } 21 22 /** 23 * findSquareQuantity 24 * 25 * @return SquareOrderDetail 26 */ 27 public function findSquareQuantity() { 28 29 $qb = $this->createQueryBuilder('so'); 30 $qb->select('so.square_product_id', 'so.square_quantity') 31 32 // 重複商品IDの削除 33 ->groupBy('so.square_product_id') 34 ->orderBy('so.square_product_id') 35 ->addOrderBy('so.square_quantity', 'DESC') 36 ->setMaxResults(5); 37 // var_dump($qb); 38 39 $QuantityResult = $qb 40 ->getQuery() 41 ->getResult(); 42 // var_dump($QuantityResult); 43 44 return $QuantityResult; 45 46 } 47}

試したこと

重複が解消できたのち
->addOrderBy('so.square_quantity', 'DESC')を付け加えたところ、上記のエラーが発生し調べている最中です。

select('so.square_product_id')に'so.square_quantity'を付け加え、再度試しましたがうまくいきませんでした。

キャッシュクリア済み
現在引き続き調査中

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

クエリビルダがおかしいというより、SQLがその様になっている時点でおかしいと思わないといけないかと思います。

SELECT list is not in GROUP BY clause and contains nonaggregated column 'local20210526.d0_.square_quantity' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

ググるとわかると思いますが、GROUP化されたカラムかSUMやAVGなどの集約カラム以外を取得しようとするとエラーになるよっていうお話です。

先に動くSQLを書いてみて、その後クエリビルダでやる場合はどうしたらいいか…を考えればいいかと思います。

もしくは、MySQL側の設定で、only_full_group_byを解除すればいいお話かと思いますが、他に与える影響を考えるとそれは無しかなと思います。

投稿2021/09/17 05:12

Ruizi_Luigi

総合スコア208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問