Sammensat view
HejJeg arbejder på et system, hvor en masse items kan have forskellige revisioner. For overskuelighedens skyld er det lige simplificeret til:
+------+----+-----+
| name | id | rev |
+------+----+-----+
| foo | 1 | 1 |
| foo | 2 | 2 |
| foo | 3 | 3 |
| bar | 4 | 1 |
+------+----+-----+
Dvs. tabeller har kun to "unikke" items, nemlig foo og bar, men foo har så tre forskellige revisioner.
Jeg ønsker nu at få alle unikke items, men kun den nyeste revision. id'erne for dette kan findes med
SELECT max( id ) as uid FROM test GROUP BY name
Dette kan så med INNER JOIN bruges til at finde hele alle de nyeste records
SELECT * FROM test INNER JOIN (
SELECT max( id ) AS uid FROM test GROUP BY name
)tmp ON tmp.uid = test.id
Det virker også ganske glimrende. Eneste problem er, at det ikke kan laves til et view fordi:
"#1349 - View's SELECT contains a subquery in the FROM clause"
Det kan man så omgås ved at lave et view der hedder "unique_ids" med
SELECT max( id ) as uid FROM test GROUP BY name
og et andet der hedder "unique_items" med
SELECT * FROM test JOIN unique_ids tmp ON ( tmp.uid = test.id )
Dette virker glimrende på forskellige database, men på den server det skal køre, får jeg denne/disse fejl:
- SELECT command denied to user 'xxxx'@'%' for column 'uid' in table 'unique_ids'
- View 'Testdb_unique_items' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
Den eneste forskel jeg lige kan se, er at på produktionsserveren er det root der har oprettet databasen, mens det på mine to test systemer er mig der har oprettet databasen.
Jeg har på test systemerne prøvet at oprette views både som bruger og som root, og begge dele virker.
Som bruger har jeg "GRANT ALL PRIVILEGES ON "test".* TO 'user'@'%'"
Nogen forslag til hvad problemet kan være? Eller evt. en mere elegant løsning end at snyde databasen ved at bruge to views :)
På forhånd tak
Christoffer