画像を見てください。なぜmysqlのこのクエリはテーブルでうまく動作しますが、そのテーブルのビューではうまくいかないのですか?
次のクエリのテーブルで実行されたときに素晴らしい作品「participants
『:
SELECT
*
FROM
(SELECT
p.*, @curRow:[email protected] + 1 AS position
FROM
(SELECT @curRow:=0) r,
participants p
WHERE
(p.isVolunteer = 0
OR p.isVolunteer IS NULL)
GROUP BY p.id
ORDER BY p.lastRegistrationDate DESC
LIMIT 0 , 25) AS p
INNER JOIN
participants_registrations pr ON p.id = pr.participantId
INNER JOIN
registrations r ON pr.registrationId = r.id
ORDER BY p.position ASC , r.createdOn DESC
しかし、私はビューで』 participants
」を置き換える「vparticipants
」私は同じ結果を得ることができない、それはsuposedされます同じでなければなりません。
問題は結果の順序が異なることです。テーブルを使用し
IはcreatedOn
カラム(日付)と1から25までの初期値とposition
カラムによって子孫に順序付け行を取得するが、ビューを使用して私は、列「位置」は6から始め得る「vparticipants」 30であり、列createdOnの順序は昇順である。私はテーブルと同じ結果が必要です。
ビューここは、非常に簡単です:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `vparticipants` AS
SELECT
`participants`.`id` AS `id`,
`participants`.`identificationNumber` AS `identificationNumber`,
`participants`.`firstName` AS `firstName`,
`participants`.`lastName` AS `lastName`,
`participants`.`email` AS `email`,
`participants`.`cellphone` AS `cellphone`,
`participants`.`city` AS `city`,
`participants`.`gender` AS `gender`,
`participants`.`shirtSize` AS `shirtSize`,
`participants`.`bloodType` AS `bloodType`,
`participants`.`emergencyContactName` AS `emergencyContactName`,
`participants`.`emergencyContactPhone` AS `emergencyContactPhone`,
`participants`.`eps` AS `eps`,
`participants`.`birthday` AS `birthday`,
`participants`.`memberOfGroupId` AS `memberOfGroupId`,
`participants`.`memberOfGroupName` AS `memberOfGroupName`,
`participants`.`lastRegistrationDate` AS `lastRegistrationDate`,
`participants`.`isVolunteer` AS `isVolunteer`,
`agreements_signatures`.`signatureRequest` AS `signatureRequest`,
`agreements_signatures`.`signature` AS `signature`,
`agreements_signatures`.`manualSignature` AS `manualSignature`,
`agreements_signatures`.`fromWhereWasSigned` AS `fromWhereWasSigned`,
`agreements_signatures`.`responsibleName` AS `responsibleName`,
`agreements_signatures`.`responsibleIdentificationNumber` AS `responsibleIdentificationNumber`,
`agreements_signatures`.`expeditionPlace` AS `expeditionPlace`,
`agreements_signatures`.`signedIn` AS `signedIn`
FROM
((`participants`
LEFT JOIN `participants_registrations` ON ((`participants_registrations`.`participantId` = `participants`.`id`)))
LEFT JOIN `agreements_signatures` ON ((`agreements_signatures`.`id` = `participants_registrations`.`agreementSignatureId`)))
おかげで任意のヘルプ。
は、合意のシグネチャテーブルの列を提供するため、ビューを使用する必要があります。 –
GROUP BY句がありますが、集計関数はありません。通常、これは不確定な結果を広範に返しますが、その場にある可能性のあるインデックスの影響を受ける可能性があります。 MySQLでは、ビューにはインデックスの認識がないので、結果が影響している可能性があります。 – Strawberry