What it should be (I believe):

SELECT `files_version`.`id` , `files_version`.`file_id` ,
`files_version`.`md5` , `files_version`.`name` ,
`files_version`.`post_date` , `files_version`.`archive` ,
`files_version`.`change_log` , `files_version`.`author_id` ,
`files_version`.`downloads` , `files_version`.`type_id` ,
`files_file`.`id` , `files_file`.`category_id` , `files_file`.`name` ,
`files_file`.`author_id` , `files_file`.`website` ,
`files_file`.`visible` , `files_file`.`post_date` ,
`files_file`.`last_post_date` , `files_file`.`parent_id` ,
`files_file`.`parent_type_id` , `files_file`.`parent_visible` ,
`files_file`.`downloads_total` , `files_file`.`downloads_today` ,
`files_file`.`downloads_month` , `files_file`.`default_image` ,
`files_file`.`default_file` , `files_file`.`game_id` ,
`files_file`.`images` , `files_file`.`ratings_score` ,
`files_file`.`ratings_votes` , `files_file`.`labels` ,
`files_file`.`comments_total` , `files_file`.`allow_patches` ,
`files_file`.`allow_plugins` , `files_file`.`favorites` ,
`files_file`.`last_update` , `files_type`.`id` , `files_type`.`name` ,
`files_type`.`description` , `files_type`.`order`
FROM `files_version`
INNER JOIN `files_file` ON `files_version`.`file_id` =
`files_file`.`id` , `files_type`
WHERE (
(
`files_file`.`game_id` =1
OR `files_file`.`game_id` =40
)
)
AND `files_version`.`file_id` = `files_file`.`id`
AND `files_version`.`type_id` = `files_type`.`id`
ORDER BY `files_version`.`post_date` DESC
LIMIT 100

What Django did:

SELECT `files_version`.`id` , `files_version`.`file_id` ,
`files_version`.`md5` , `files_version`.`name` ,
`files_version`.`post_date` , `files_version`.`archive` ,
`files_version`.`change_log` , `files_version`.`author_id` ,
`files_version`.`downloads` , `files_version`.`type_id` ,
`files_file`.`id` , `files_file`.`category_id` , `files_file`.`name` ,
`files_file`.`author_id` , `files_file`.`website` ,
`files_file`.`visible` , `files_file`.`post_date` ,
`files_file`.`last_post_date` , `files_file`.`parent_id` ,
`files_file`.`parent_type_id` , `files_file`.`parent_visible` ,
`files_file`.`downloads_total` , `files_file`.`downloads_today` ,
`files_file`.`downloads_month` , `files_file`.`default_image` ,
`files_file`.`default_file` , `files_file`.`game_id` ,
`files_file`.`images` , `files_file`.`ratings_score` ,
`files_file`.`ratings_votes` , `files_file`.`labels` ,
`files_file`.`comments_total` , `files_file`.`allow_patches` ,
`files_file`.`allow_plugins` , `files_file`.`favorites` ,
`files_file`.`last_update` , `files_type`.`id` , `files_type`.`name` ,
`files_type`.`description` , `files_type`.`order`
FROM `files_version`
INNER JOIN `files_file` AS `files_version__file` ON
`files_version`.`file_id` = `files_version__file`.`id` , `files_file` ,
`files_type`
WHERE (
(
`files_version__file`.`game_id` =1
OR `files_version__file`.`game_id` =40
)
)
AND `files_version`.`file_id` = `files_file`.`id`
AND `files_version`.`type_id` = `files_type`.`id`
ORDER BY `files_version`.`post_date` DESC
LIMIT 100

Why does Django join "files_file" twice? I do a
.filter(file__game=blah).select_related(fields=['file', 'type']) so it
joins the files table twice? This would happen the same with a normal
.select_related() as well. Maybe the SQL engine optimizes this but I'm
not sure.


--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to