請看圖片。與表「participants
‘執行時爲什麼mysql中的這個查詢可以正常工作,但不能與該表的視圖匹配?
下面的查詢的偉大工程:
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應該是一樣的。
問題是結果的順序是不同的。
使用該表,我得到了createdOn
列(日期)和position
列中值從1到25開始排序的行,但使用視圖'vparticipants'我得到的列'position'從6開始到30,並且列創建的順序方向順序。我需要與表格相同的結果。
的觀點很簡單,在這裏:
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