私は約2日間私の頭を吹き飛ばすクエリを得ました。 Pleeeaaze!MySQLのフィルタ、COUNT、GROUP BY/LIMIT/ORDER BYとサブクエリを使用したHTMLクエリ
私が行う必要があるのは、下記の表に示すデータ形式を取得することです。出力は、顧客のフィルタ(name、codeX/Y/Z)、アプリケーション(名前、ウェーブ)、migrationLabel .label、migrationMessage。(日付)ページ分割を使用する(ページあたり50)。
各アプリケーションは0からn個のメッセージを表示でき、属性「rowspan」を使用してHTMLテーブルを作成する必要があります。ここで
はテーブルです:
"#:PK"
"@:FK"
- アプリケーション(#ID、ラベル、@CustomerID)
- 顧客(#ID 、name、codeX、codeY、codeZ)
- migrationMessage(@applicationId、crea tionTime、closureDate、previsionalDate、@labelId、@authorId)
- migrationLabel(#ID、ラベル、発注)
- 作品(@employeeId、@applicationId、@roleId)
- 従業員(#ID、ユーザ名) ここで
は、現在のクエリです:ほとんどすべては、このクエリを使用して動作します
<?php
$query = 'SELECT
c.id AS customerId, c.name AS customerName, c.X3Code, c.mfgProCode, c.as400Code, c.jdeCode,
a.id AS appId, a.label AS appName, a.wave,
mm.closureDate, mm.previsionalDate, mm.content,
ml.id, ml.label,
q.msgCount
FROM (
SELECT a.id
FROM `application` a
JOIN `customer` c ON c.id = a.customerId
ORDER BY c.name
) l
JOIN application a ON a.id = l.id
JOIN `customer` c ON c.id = a.customerId
LEFT JOIN (
SELECT applicationId, COUNT(*) AS msgCount
FROM application a
JOIN migrationMessage mm ON mm.applicationId = a.id
JOIN migrationLabel ml ON ml.id = mm.labelId
JOIN customer c ON c.id = a.customerId
' . $where . '
GROUP BY applicationId
LIMIT ' . $limit . ' OFFSET ' . $offset . '
) q ON q.applicationId = a.id
LEFT JOIN `migrationMessage`mm ON mm.applicationId = q.applicationId
LEFT JOIN `migrationLabel` ml ON ml.id = mm.labelId
JOIN `works` w ON w.applicationId = a.id '
. ($user->isOperator() ? ' AND w.roleId = ' . Role::Rri : ' AND w.employeeId = ' . $user->id)
. ' JOIN employee e ON e.id = w.employeeId'
. ($user->isJustUser() ? ' AND e.siteId = ' . $user->siteId : '')
. $where
. ' ORDER BY c.name, a.label, ml.ordering'
. 'LIMIT ' . $limit . ' OFFSET ' . $offset;
私は2ページに自分自身を取得するいくつかのメッセージでアプリケーションを得たときに、問題が起こる... たとえば、 "rowspan"(クエリのmsgCount)は5ですが、最後の3つのメッセージは最初の2つのページとは異なるページにあり、HTML表示は完全に間違っています。 See HTML result